瀏覽代碼

Accept incomplete records in GelfMessageFormatter, closes #482

Jordi Boggiano 11 年之前
父節點
當前提交
5cd99de56d
共有 2 個文件被更改,包括 31 次插入6 次删除
  1. 16 6
      src/Monolog/Formatter/GelfMessageFormatter.php
  2. 15 0
      tests/Monolog/Formatter/GelfMessageFormatterTest.php

+ 16 - 6
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));

+ 15 - 0
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
      */