diff --git a/src/Symfony/Bridge/Monolog/Formatter/ConsoleFormatter.php b/src/Symfony/Bridge/Monolog/Formatter/ConsoleFormatter.php index 14f44069eb08..0cf1e8bd29d8 100644 --- a/src/Symfony/Bridge/Monolog/Formatter/ConsoleFormatter.php +++ b/src/Symfony/Bridge/Monolog/Formatter/ConsoleFormatter.php @@ -133,7 +133,9 @@ public function format(array $record) } $formatted = strtr($this->options['format'], [ - '%datetime%' => $record['datetime']->format($this->options['date_format']), + '%datetime%' => $record['datetime'] instanceof \DateTimeInterface + ? $record['datetime']->format($this->options['date_format']) + : $record['datetime'], '%start_tag%' => sprintf('<%s>', $levelColor), '%level_name%' => sprintf('%-9s', $record['level_name']), '%end_tag%' => '', diff --git a/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php b/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php new file mode 100644 index 000000000000..c09597e916cf --- /dev/null +++ b/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Monolog\Tests\Formatter; + +use Monolog\Logger; +use PHPUnit\Framework\TestCase; +use Symfony\Bridge\Monolog\Formatter\ConsoleFormatter; + +class ConsoleFormatterTest extends TestCase +{ + /** + * @dataProvider providerFormatTests + */ + public function testFormat(array $record, $expectedMessage) + { + $formatter = new ConsoleFormatter(); + self::assertSame($expectedMessage, $formatter->format($record)); + } + + /** + * @return array + */ + public function providerFormatTests() + { + $currentDateTime = new \DateTime(); + + return [ + 'record with DateTime object in datetime field' => [ + 'record' => [ + 'message' => 'test', + 'context' => [], + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => $currentDateTime, + 'extra' => [], + ], + 'expectedMessage' => sprintf( + "%s WARNING [test] test\n", + $currentDateTime->format(ConsoleFormatter::SIMPLE_DATE) + ), + ], + 'record with string in datetime field' => [ + 'record' => [ + 'message' => 'test', + 'context' => [], + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => '2019-01-01T00:42:00+00:00', + 'extra' => [], + ], + 'expectedMessage' => "2019-01-01T00:42:00+00:00 WARNING [test] test\n", + ], + ]; + } +}