diff --git a/src/Monolog/Formatter/NormalizerFormatter.php b/src/Monolog/Formatter/NormalizerFormatter.php index 03619352..ce55fbc4 100644 --- a/src/Monolog/Formatter/NormalizerFormatter.php +++ b/src/Monolog/Formatter/NormalizerFormatter.php @@ -96,7 +96,7 @@ class NormalizerFormatter implements FormatterInterface // non-serializable objects that implement __toString stringified if (method_exists($data, '__toString') && !$data instanceof \JsonSerializable) { - $value = (string) $data; + $value = $data->__toString(); } else { // the rest is json-serialized in some way $value = $this->toJson($data, true); diff --git a/tests/Monolog/Formatter/NormalizerFormatterTest.php b/tests/Monolog/Formatter/NormalizerFormatterTest.php index c484dfe6..447476ad 100644 --- a/tests/Monolog/Formatter/NormalizerFormatterTest.php +++ b/tests/Monolog/Formatter/NormalizerFormatterTest.php @@ -78,6 +78,15 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase ), $formatted); } + public function testFormatToStringExceptionHandle() + { + $formatter = new NormalizerFormatter('Y-m-d'); + $this->setExpectedException('RuntimeException', 'Could not convert to string'); + $formatter->format(array( + 'myObject' => new TestToStringError(), + )); + } + public function testBatchFormat() { $formatter = new NormalizerFormatter('Y-m-d'); @@ -268,3 +277,11 @@ class TestStreamFoo return $this->foo . ' - ' . (string) stream_get_contents($this->resource); } } + +class TestToStringError +{ + public function __toString() + { + throw new \RuntimeException('Could not convert to string'); + } +} \ No newline at end of file