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

Merge remote-tracking branch 'tarjei/master'

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

+ 7 - 0
src/Monolog/Formatter/GelfMessageFormatter.php

@@ -89,6 +89,13 @@ class GelfMessageFormatter extends NormalizerFormatter
             $message->setAdditional($this->contextPrefix . $key, is_scalar($val) ? $val : $this->toJson($val));
         }
 
+        if (null === $message->getFile() && isset($record['context']['exception'])) {
+            if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) {
+                $message->setFile($matches[1]);
+                $message->setLine($matches[2]);
+            }
+        }
+
         return $message;
     }
 }

+ 29 - 0
tests/Monolog/Formatter/GelfMessageFormatterTest.php

@@ -119,6 +119,35 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase
 
     }
 
+    /**
+     * @covers Monolog\Formatter\GelfMessageFormatter::format
+     */
+    public function testFormatWithContextContainingException()
+    {
+        $formatter = new GelfMessageFormatter();
+        $record = array(
+            'level' => Logger::ERROR,
+            'level_name' => 'ERROR',
+            'channel' => 'meh',
+            'context' => array('from' => 'logger', 'exception' => [
+                'class' => '\Exception',
+                'file'  => '/some/file/in/dir.php:56',
+                'trace' => ['/some/file/1.php:23', '/some/file/2.php:3']
+            ]),
+            'datetime' => new \DateTime("@0"),
+            'extra' => array(),
+            'message' => 'log'
+        );
+
+        $message = $formatter->format($record);
+
+        $this->assertInstanceOf('Gelf\Message', $message);
+
+        $this->assertEquals("/some/file/in/dir.php", $message->getFile());
+        $this->assertEquals("56", $message->getLine());
+
+    }
+
     /**
      * @covers Monolog\Formatter\GelfMessageFormatter::format
      */