diff options
author | Jordi Boggiano <j.boggiano@seld.be> | 2016-05-26 19:21:47 +0100 |
---|---|---|
committer | Jordi Boggiano <j.boggiano@seld.be> | 2016-05-26 19:21:47 +0100 |
commit | 2ff7afda31aa751b041cfeb24e4a4c580aeae229 (patch) | |
tree | de430368dc78c7a13aee6f25a188dcacaefd30f9 /src | |
parent | 3d7842ec1ef2230877680dc94af15d6505e94bff (diff) | |
download | monolog-2ff7afda31aa751b041cfeb24e4a4c580aeae229.zip monolog-2ff7afda31aa751b041cfeb24e4a4c580aeae229.tar.gz monolog-2ff7afda31aa751b041cfeb24e4a4c580aeae229.tar.bz2 |
Change the way objects are normalized to avoid multi-levels of json encoding, fixes #560
Diffstat (limited to 'src')
-rw-r--r-- | src/Monolog/Formatter/NormalizerFormatter.php | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/Monolog/Formatter/NormalizerFormatter.php b/src/Monolog/Formatter/NormalizerFormatter.php index bd524bd..8e0e7a5 100644 --- a/src/Monolog/Formatter/NormalizerFormatter.php +++ b/src/Monolog/Formatter/NormalizerFormatter.php @@ -98,19 +98,25 @@ class NormalizerFormatter implements FormatterInterface return $this->normalizeException($data); } - // non-serializable objects that implement __toString stringified - if (method_exists($data, '__toString') && !$data instanceof \JsonSerializable) { + if ($data instanceof \JsonSerializable) { + $value = $data->jsonSerialize(); + } elseif (method_exists($data, '__toString')) { $value = $data->__toString(); } else { - // the rest is json-serialized in some way - $value = $this->toJson($data, true); + // the rest is normalized by json encoding and decoding it + $encoded = $this->toJson($data, true); + if ($encoded === false) { + $value = 'JSON_ERROR'; + } else { + $value = json_decode($encoded, true); + } } - return sprintf("[object] (%s: %s)", get_class($data), $value); + return [get_class($data) => $value]; } if (is_resource($data)) { - return sprintf('[resource] (%s)', get_resource_type($data)); + return sprintf('[resource(%s)]', get_resource_type($data)); } return '[unknown('.gettype($data).')]'; |