From 85d49f856817acadbbcdcafb06f290d256e573bd Mon Sep 17 00:00:00 2001 From: Lars Strojny Date: Thu, 13 Apr 2017 00:06:26 +0200 Subject: [PATCH 1/2] Better PSR-3 message formatting --- src/Monolog/Processor/PsrLogMessageProcessor.php | 4 +++- tests/Monolog/Processor/PsrLogMessageProcessorTest.php | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Monolog/Processor/PsrLogMessageProcessor.php b/src/Monolog/Processor/PsrLogMessageProcessor.php index a10cd76c..a9d2e70d 100644 --- a/src/Monolog/Processor/PsrLogMessageProcessor.php +++ b/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -20,7 +20,7 @@ namespace Monolog\Processor; */ class PsrLogMessageProcessor { - const SIMPLE_DATE = "Y-m-d\TH:i:sP"; + const SIMPLE_DATE = "Y-m-d\TH:i:s.uP"; private $dateFormat; @@ -60,6 +60,8 @@ class PsrLogMessageProcessor $replacements[$placeholder] = $val->format($this->dateFormat); } elseif (is_object($val)) { $replacements[$placeholder] = '[object '.get_class($val).']'; + } elseif (is_array($val)) { + $replacements[$placeholder] = 'array'.@json_encode($val); } else { $replacements[$placeholder] = '['.gettype($val).']'; } diff --git a/tests/Monolog/Processor/PsrLogMessageProcessorTest.php b/tests/Monolog/Processor/PsrLogMessageProcessorTest.php index 60fafc64..3b5ec6e9 100644 --- a/tests/Monolog/Processor/PsrLogMessageProcessorTest.php +++ b/tests/Monolog/Processor/PsrLogMessageProcessorTest.php @@ -68,7 +68,11 @@ class PsrLogMessageProcessorTest extends \PHPUnit\Framework\TestCase [false, ''], [$date, $date->format(PsrLogMessageProcessor::SIMPLE_DATE)], [new \stdClass, '[object stdClass]'], - [[], '[array]'], + [[], 'array[]'], + [[], 'array[]'], + [[1, 2, 3], 'array[1,2,3]'], + [['foo' => 'bar'], 'array{"foo":"bar"}'], + [stream_context_create(), '[resource]'], ]; } } From bbf9de5c8d29763d64230645b653cc63ef393882 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 18 Jun 2018 16:48:08 +0200 Subject: [PATCH 2/2] Follow useMicroseconds flag when possible --- src/Monolog/Processor/PsrLogMessageProcessor.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Monolog/Processor/PsrLogMessageProcessor.php b/src/Monolog/Processor/PsrLogMessageProcessor.php index a9d2e70d..f845f883 100644 --- a/src/Monolog/Processor/PsrLogMessageProcessor.php +++ b/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -33,7 +33,7 @@ class PsrLogMessageProcessor */ public function __construct(string $dateFormat = null, bool $removeUsedContextFields = false) { - $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat; + $this->dateFormat = $dateFormat; $this->removeUsedContextFields = $removeUsedContextFields; } @@ -57,7 +57,13 @@ class PsrLogMessageProcessor if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) { $replacements[$placeholder] = $val; } elseif ($val instanceof \DateTimeInterface) { - $replacements[$placeholder] = $val->format($this->dateFormat); + if (!$this->dateFormat && $val instanceof \Monolog\DateTimeImmutable) { + // handle monolog dates using __toString if no specific dateFormat was asked for + // so that it follows the useMicroseconds flag + $replacements[$placeholder] = (string) $val; + } else { + $replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE); + } } elseif (is_object($val)) { $replacements[$placeholder] = '[object '.get_class($val).']'; } elseif (is_array($val)) {