From 5cd99de56d8983e9a3316b0f94bf9ab41d41ee76 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 1 Mar 2015 13:59:22 +0000 Subject: [PATCH] Accept incomplete records in GelfMessageFormatter, closes #482 --- .../Formatter/GelfMessageFormatter.php | 22 ++++++++++++++----- .../Formatter/GelfMessageFormatterTest.php | 15 +++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Monolog/Formatter/GelfMessageFormatter.php b/src/Monolog/Formatter/GelfMessageFormatter.php index 8d01c64c..1e431750 100644 --- a/src/Monolog/Formatter/GelfMessageFormatter.php +++ b/src/Monolog/Formatter/GelfMessageFormatter.php @@ -67,19 +67,29 @@ class GelfMessageFormatter extends NormalizerFormatter public function format(array $record) { $record = parent::format($record); + + if (!isset($record['datetime'], $record['message'], $record['level'])) { + throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, '.var_export($record, true).' given'); + } + $message = new Message(); $message ->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']]); - // Do not duplicate these values in the additional fields - unset($record['extra']['line']); - unset($record['extra']['file']); + if (isset($record['channel'])) { + $message->setFacility($record['channel']); + } + if (isset($record['extra']['line'])) { + $message->setLine($record['extra']['line']); + unset($record['extra']['line']); + } + if (isset($record['extra']['file'])) { + $message->setFile($record['extra']['file']); + unset($record['extra']['file']); + } foreach ($record['extra'] as $key => $val) { $message->setAdditional($this->extraPrefix . $key, is_scalar($val) ? $val : $this->toJson($val)); diff --git a/tests/Monolog/Formatter/GelfMessageFormatterTest.php b/tests/Monolog/Formatter/GelfMessageFormatterTest.php index 3f47a09a..6ac14854 100644 --- a/tests/Monolog/Formatter/GelfMessageFormatterTest.php +++ b/tests/Monolog/Formatter/GelfMessageFormatterTest.php @@ -80,6 +80,21 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase $this->assertEquals(14, $message->getLine()); } + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + * @expectedException InvalidArgumentException + */ + public function testFormatInvalidFails() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + ); + + $formatter->format($record); + } + /** * @covers Monolog\Formatter\GelfMessageFormatter::format */