Просмотр исходного кода

Output message to the user when chrome logs have been truncated, refs #172

Jordi Boggiano 12 лет назад
Родитель
Сommit
41d514114c

+ 14 - 1
src/Monolog/Handler/ChromePHPHandler.php

@@ -12,6 +12,7 @@
 namespace Monolog\Handler;
 
 use Monolog\Formatter\ChromePHPFormatter;
+use Monolog\Logger;
 
 /**
  * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)
@@ -115,8 +116,20 @@ class ChromePHPHandler extends AbstractProcessingHandler
         if (strlen($data) > 240*1024) {
             self::$overflowed = true;
 
-            return;
+            $record = array(
+                'message' => 'Incomplete logs, chrome header size limit reached',
+                'context' => array(),
+                'level' => Logger::WARNING,
+                'level_name' => Logger::getLevelName(Logger::WARNING),
+                'channel' => 'monolog',
+                'datetime' => new \DateTime(),
+                'extra' => array(),
+            );
+            self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);
+            $json = @json_encode(self::$json);
+            $data = base64_encode(utf8_encode($json));
         }
+
         $this->sendHeader(self::HEADER_NAME, $data);
     }
 

+ 29 - 3
tests/Monolog/Handler/ChromePHPHandlerTest.php

@@ -51,13 +51,39 @@ class ChromePHPHandlerTest extends TestCase
         $handler = new TestChromePHPHandler();
         $handler->handle($this->getRecord(Logger::DEBUG));
         $handler->handle($this->getRecord(Logger::WARNING, str_repeat('a', 150*1024)));
-        $headersBefore = $handler->getHeaders();
 
         // overflow chrome headers limit
         $handler->handle($this->getRecord(Logger::WARNING, str_repeat('a', 100*1024)));
 
-        // check the headers did not change
-        $this->assertEquals($headersBefore, $handler->getHeaders());
+        $expected = array(
+            'X-ChromePhp-Data'   => base64_encode(utf8_encode(json_encode(array(
+                'version' => ChromePHPHandler::VERSION,
+                'columns' => array('label', 'log', 'backtrace', 'type'),
+                'rows' => array(
+                    array(
+                        'test',
+                        'test',
+                        'unknown',
+                        'log',
+                    ),
+                    array(
+                        'test',
+                        str_repeat('a', 150*1024),
+                        'unknown',
+                        'warn',
+                    ),
+                    array(
+                        'monolog',
+                        'Incomplete logs, chrome header size limit reached',
+                        'unknown',
+                        'warn',
+                    ),
+                ),
+                'request_uri' => '',
+            ))))
+        );
+
+        $this->assertEquals($expected, $handler->getHeaders());
     }
 
     public function testConcurrentHandlers()