Skip to content
Browse files

Add support for previous exceptions in LineFormatter

  • Loading branch information...
1 parent 88d705c commit 642cdf620bb9d71bd06f64f6636144c471c551b8 @Seldaek committed
Showing with 26 additions and 1 deletion.
  1. +8 −1 src/Monolog/Formatter/LineFormatter.php
  2. +18 −0 tests/Monolog/Formatter/LineFormatterTest.php
View
9 src/Monolog/Formatter/LineFormatter.php
@@ -73,7 +73,14 @@ protected function normalize($data)
}
if ($data instanceof \Exception) {
- return '[object] ('.get_class($data).': '.$data->getMessage().' at '.$data->getFile().':'.$data->getLine().')';
+ $previousText = '';
+ if ($previous = $data->getPrevious()) {
+ do {
+ $previousText .= ', '.get_class($previous).': '.$previous->getMessage().' at '.$previous->getFile().':'.$previous->getLine();
+ } while ($previous = $previous->getPrevious());
+ }
+
+ return '[object] ('.get_class($data).': '.$data->getMessage().' at '.$data->getFile().':'.$data->getLine().$previousText.')';
}
return parent::normalize($data);
View
18 tests/Monolog/Formatter/LineFormatterTest.php
@@ -107,6 +107,24 @@ public function testDefFormatWithException()
$this->assertEquals('['.date('Y-m-d').'] core.CRITICAL: foobar {"exception":"[object] (RuntimeException: Foo at '.substr($path, 1, -1).':'.(__LINE__-8).')"} []'."\n", $message);
}
+ public function testDefFormatWithPreviousException()
+ {
+ $formatter = new LineFormatter(null, 'Y-m-d');
+ $previous = new \LogicException('Wut?');
+ $message = $formatter->format(array(
+ 'level_name' => 'CRITICAL',
+ 'channel' => 'core',
+ 'context' => array('exception' => new \RuntimeException('Foo', 0, $previous)),
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ 'message' => 'foobar',
+ ));
+
+ $path = str_replace('\\/', '/', json_encode(__FILE__));
+
+ $this->assertEquals('['.date('Y-m-d').'] core.CRITICAL: foobar {"exception":"[object] (RuntimeException: Foo at '.substr($path, 1, -1).':'.(__LINE__-8).', LogicException: Wut? at '.substr($path, 1, -1).':'.(__LINE__-12).')"} []'."\n", $message);
+ }
+
public function testBatchFormat()
{
$formatter = new LineFormatter(null, 'Y-m-d');

0 comments on commit 642cdf6

Please sign in to comment.
Something went wrong with that request. Please try again.