Skip to content

Commit

Permalink
getReducedRecord fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
yapro committed May 5, 2024
1 parent d241f5a commit 9711ef8
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
9 changes: 7 additions & 2 deletions src/Handler/JsonToStdErrHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public function getMessage(array $record): string
if ($this->isMessageShort($result)) {
return $result;
}
// здесь указаны массивах в которых будет выполнен поиск ключей с большим значением
// здесь указаны ключи массива, в которых будет выполнен поиск ключей с большим значением
// при нахождении ключей с большим значением, они по очереди удаляются, пока лог-запись не станет приемлемого размера
if (isset($record['context'])) {
$result = $this->getReducedRecord($record, 'context');
Expand All @@ -125,6 +125,7 @@ public function getMessage(array $record): string

public function getReducedRecord(array &$record, $keyName): string
{
$mysteriousCharacters = 2;
$explanation = self::THE_LOG_ENTRY_IS_TOO_LONG_SO_IT_IS_REDUCED;
$explanationLength = mb_strlen($explanation);
$preserved = array_reverse($record[$keyName], true);
Expand All @@ -138,7 +139,11 @@ public function getReducedRecord(array &$record, $keyName): string
if ($excessCharactersInTheRecord > 0) {
// находим насколько мы должны подрезать value:
$valueAsString = $this->varHelper->dump($value);
$newValueMaxLength = mb_strlen($valueAsString) - $excessCharactersInTheRecord - $explanationLength;
// почему-то функция dump добавляет к строкам двойные кавычки, пока не разобрался, поэтому:
if (is_string($value) && mb_substr($valueAsString, 0, 1) === '"' && mb_substr($value, 0, 1) !== '"') {
$valueAsString = mb_substr($valueAsString, 1);
}
$newValueMaxLength = mb_strlen($valueAsString) - $excessCharactersInTheRecord - $explanationLength - $mysteriousCharacters;
if ($newValueMaxLength > 0) {// даем пояснение + подрезаем value:
$record[$keyName][$key] = $explanation . mb_substr($valueAsString, 0, $newValueMaxLength);
} else {// символов на подрезку не остается, увы удаляем value:
Expand Down
12 changes: 9 additions & 3 deletions tests/Unit/WhiteBox/Handler/JsonToStdErrHandlerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,37 @@
namespace YaPro\MonologExt\Tests\Unit\WhiteBox\Handler;

use PHPUnit\Framework\TestCase;
use YaPro\Helper\LiberatorTrait;
use YaPro\MonologExt\Handler\JsonToStdErrHandler;
use YaPro\MonologExt\VarHelper;

class JsonToStdErrHandlerTest extends TestCase
{
use LiberatorTrait;

public function testGetReducedRecord(): void
{
$mock = $this->getMockBuilder(JsonToStdErrHandler::class)
->disableOriginalConstructor()
->setMethodsExcept(['getReducedRecord', 'getJson', 'isMessageShort'])
->getMock();

$this->setClassPropertyValue($mock, 'varHelper', new VarHelper());

// подрезка сообщения:
$keyName = 'context';
$record = [
$keyName => [
'first' => 'string',
'second' => 'string' . str_repeat('ю', JsonToStdErrHandler::MAX_RECORD_LENGTH),
'second' => str_repeat('ю', JsonToStdErrHandler::MAX_RECORD_LENGTH),
'thirs' => 'string',
],
];
$explanationMessagesLength = 129;
$explanationMessagesLength = 123;
$expected = [
$keyName => [
'first' => 'string',
'second' => JsonToStdErrHandler::THE_LOG_ENTRY_IS_TOO_LONG_SO_IT_IS_REDUCED . 'string' . str_repeat('ю', JsonToStdErrHandler::MAX_RECORD_LENGTH - $explanationMessagesLength),
'second' => JsonToStdErrHandler::THE_LOG_ENTRY_IS_TOO_LONG_SO_IT_IS_REDUCED . str_repeat('ю', JsonToStdErrHandler::MAX_RECORD_LENGTH - $explanationMessagesLength),
'thirs' => JsonToStdErrHandler::THE_LOG_ENTRY_IS_TOO_LONG,
],
];
Expand Down

0 comments on commit 9711ef8

Please sign in to comment.