diff --git a/src/Handler/JsonToStdErrHandler.php b/src/Handler/JsonToStdErrHandler.php index 650fb3c..ab79523 100644 --- a/src/Handler/JsonToStdErrHandler.php +++ b/src/Handler/JsonToStdErrHandler.php @@ -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'); @@ -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); @@ -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: diff --git a/tests/Unit/WhiteBox/Handler/JsonToStdErrHandlerTest.php b/tests/Unit/WhiteBox/Handler/JsonToStdErrHandlerTest.php index 4a93c76..e0a66c5 100644 --- a/tests/Unit/WhiteBox/Handler/JsonToStdErrHandlerTest.php +++ b/tests/Unit/WhiteBox/Handler/JsonToStdErrHandlerTest.php @@ -4,10 +4,14 @@ 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) @@ -15,20 +19,22 @@ public function testGetReducedRecord(): void ->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, ], ];