]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 24 Mar 2026 11:49:26 +0000 (14:49 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 24 Mar 2026 11:49:26 +0000 (14:49 +0300)
Многострочные ошибки (содержащие $_SERVER dump) ломали формат
файла error_tracking.log: file() разбивала одну запись на
множество строк, каждая выводилась как "Некорректная строка".

Фикс: str_replace \n → \\n при записи, убран error_log спам.

erp24/log/TelegramTarget.php

index bd4435ea96ee585361551e6324ca7a799949a16d..8018f470cd9e20a73bb0cc908835240af63b62c7 100644 (file)
@@ -52,10 +52,12 @@ class TelegramTarget extends \yii\log\Target
         $normalizedCurrentError = $this->normalizeText($currentError);
         $currentErrorHash = md5($normalizedCurrentError);
 
+        // Экранируем переносы строк для хранения — одна запись = одна строка файла
+        $escapedError = str_replace(["\r\n", "\n", "\r"], '\\n', $currentError);
+
         foreach ($errorLines as &$line) {
             $parts = explode('|', $line, 4);
             if (count($parts) < 4) {
-                error_log("Некорректная строка: " . $line);
                 continue;
             }
             [$date, $count, $hash, $errorText] = $parts;
@@ -68,19 +70,16 @@ class TelegramTarget extends \yii\log\Target
                     return false;
                 }
 
-
                 $count++;
                 $line = implode('|', [$currentDate, $count, $hash, $errorText]);
                 break;
             }
         }
 
-
         if (!$errorExists) {
-            $errorLines[] = implode('|', [$currentDate, 1, $currentErrorHash, $currentError]);
+            $errorLines[] = implode('|', [$currentDate, 1, $currentErrorHash, $escapedError]);
         }
 
-
         file_put_contents($filePath, implode(PHP_EOL, $errorLines) . PHP_EOL);
 
         return true;