diff --git a/src/Monolog/Formatter/GelfMessageFormatter.php b/src/Monolog/Formatter/GelfMessageFormatter.php index e3ecb2ec..95c17ad9 100644 --- a/src/Monolog/Formatter/GelfMessageFormatter.php +++ b/src/Monolog/Formatter/GelfMessageFormatter.php @@ -19,7 +19,7 @@ use Gelf\Message; * * @author Matt Lehner */ -class GelfMessageFormatter implements FormatterInterface +class GelfMessageFormatter extends NormalizerFormatter { /** * @var string the name of the system for the Gelf log message @@ -35,7 +35,7 @@ class GelfMessageFormatter implements FormatterInterface * @var string a prefix for 'context' fields from the Monolog record (optional) */ protected $contextPrefix; - + /** * Translates Monolog log levels to Graylog2 log priorities. */ @@ -50,6 +50,8 @@ class GelfMessageFormatter implements FormatterInterface public function __construct($systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_') { + parent::__construct('U.u'); + $this->systemName = $systemName ?: gethostname(); $this->extraPrefix = $extraPrefix; @@ -61,42 +63,29 @@ class GelfMessageFormatter implements FormatterInterface */ public function format(array $record) { + $record = parent::format($record); $message = new Message(); $message - ->setTimestamp($record['datetime']->format('U.u')) + ->setTimestamp($record['datetime']) ->setShortMessage((string) $record['message']) ->setFacility($record['channel']) ->setHost($this->systemName) ->setLine(isset($record['extra']['line']) ? $record['extra']['line'] : null) ->setFile(isset($record['extra']['file']) ? $record['extra']['file'] : null) - ->setLevel($this->logLevels[ $record['level'] ]); + ->setLevel($this->logLevels[$record['level']]); // Do not duplicate these values in the additional fields unset($record['extra']['line']); unset($record['extra']['file']); foreach ($record['extra'] as $key => $val) { - $message->setAdditional($this->extraPrefix . $key, is_scalar($val) ? $val : json_encode($val)); + $message->setAdditional($this->extraPrefix . $key, is_scalar($val) ? $val : $this->toJson($val)); } foreach ($record['context'] as $key => $val) { - $message->setAdditional($this->contextPrefix . $key, is_scalar($val) ? $val : json_encode($val)); + $message->setAdditional($this->contextPrefix . $key, is_scalar($val) ? $val : $this->toJson($val)); } return $message; } - - /** - * {@inheritdoc} - */ - public function formatBatch(array $records) - { - $messages = array(); - - foreach ($records as $record) { - $messages[] = $this->format($record); - } - - return $messages; - } } diff --git a/src/Monolog/Formatter/NormalizerFormatter.php b/src/Monolog/Formatter/NormalizerFormatter.php index 673302d8..09cadb72 100644 --- a/src/Monolog/Formatter/NormalizerFormatter.php +++ b/src/Monolog/Formatter/NormalizerFormatter.php @@ -76,12 +76,15 @@ class NormalizerFormatter implements FormatterInterface return '[resource]'; } + return sprintf("[object] (%s: %s)", get_class($data), $this->toJson($data)); + } + + protected function toJson($data) + { if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - $encoded = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); - } else { - $encoded = json_encode($data); + return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } - return sprintf("[object] (%s: %s)", get_class($data), $encoded); + return json_encode($data); } } diff --git a/tests/Monolog/Handler/GelfHandlerTest.php b/tests/Monolog/Handler/GelfHandlerTest.php index a0af4830..8b395908 100644 --- a/tests/Monolog/Handler/GelfHandlerTest.php +++ b/tests/Monolog/Handler/GelfHandlerTest.php @@ -63,7 +63,7 @@ class GelfHandlerTest extends TestCase $record = $this->getRecord(Logger::DEBUG, "A test debug message"); $handler->handle($record); - $this->assertEquals(7, $messagePublisher->lastMessage->getLevel()); + $this->assertEquals(LOG_DEBUG, $messagePublisher->lastMessage->getLevel()); $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage()); @@ -77,7 +77,7 @@ class GelfHandlerTest extends TestCase $record = $this->getRecord(Logger::WARNING, "A test warning message"); $handler->handle($record); - $this->assertEquals(4, $messagePublisher->lastMessage->getLevel()); + $this->assertEquals(LOG_WARNING, $messagePublisher->lastMessage->getLevel()); $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage());