diff --git a/src/Monolog/Handler/ChromePHPHandler.php b/src/Monolog/Handler/ChromePHPHandler.php index 5a50c00c..91b8f8aa 100644 --- a/src/Monolog/Handler/ChromePHPHandler.php +++ b/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); } diff --git a/tests/Monolog/Handler/ChromePHPHandlerTest.php b/tests/Monolog/Handler/ChromePHPHandlerTest.php index a8d50cb1..ef50253d 100644 --- a/tests/Monolog/Handler/ChromePHPHandlerTest.php +++ b/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()