From 24e414c99378c227fff95a6483c85dfff2e79779 Mon Sep 17 00:00:00 2001 From: henning Date: Tue, 7 Jun 2022 16:13:46 +0200 Subject: [PATCH] Added $datetime parameter to addRecord method to optionally log into the past/future --- src/Monolog/Logger.php | 13 +++++++------ tests/Monolog/LoggerTest.php | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Monolog/Logger.php b/src/Monolog/Logger.php index 04118959..09918520 100644 --- a/src/Monolog/Logger.php +++ b/src/Monolog/Logger.php @@ -301,14 +301,15 @@ class Logger implements LoggerInterface, ResettableInterface /** * Adds a log record. * - * @param int $level The logging level - * @param string $message The log message - * @param mixed[] $context The log context - * @return bool Whether the record has been processed + * @param int $level The logging level + * @param string $message The log message + * @param mixed[] $context The log context + * @param DateTimeImmutable $datetime Optional log date to log into the past or future + * @return bool Whether the record has been processed * * @phpstan-param Level $level */ - public function addRecord(int $level, string $message, array $context = []): bool + public function addRecord(int $level, string $message, array $context = [], DateTimeImmutable $datetime = null): bool { if ($this->detectCycles) { $this->logDepth += 1; @@ -338,7 +339,7 @@ class Logger implements LoggerInterface, ResettableInterface 'level' => $level, 'level_name' => $levelName, 'channel' => $this->name, - 'datetime' => new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), + 'datetime' => $datetime ?? new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), 'extra' => [], ]; diff --git a/tests/Monolog/LoggerTest.php b/tests/Monolog/LoggerTest.php index bec548fd..0b07a7cf 100644 --- a/tests/Monolog/LoggerTest.php +++ b/tests/Monolog/LoggerTest.php @@ -739,6 +739,28 @@ class LoggerTest extends \PHPUnit\Framework\TestCase $this->assertNotSame($uid1, $processorUid1->getUid()); $this->assertNotSame($uid2, $processorUid2->getUid()); } + + /** + * @covers Logger::addRecord + */ + public function testLogWithDateTime() + { + foreach ([true, false] as $microseconds) { + $logger = new Logger(__METHOD__); + + $loggingHandler = new LoggingHandler($logger); + $testHandler = new TestHandler(); + + $logger->pushHandler($loggingHandler); + $logger->pushHandler($testHandler); + + $datetime = (new DateTimeImmutable($microseconds))->modify('2022-03-04 05:06:07'); + $logger->addRecord(Logger::DEBUG, 'test', [], $datetime); + + list($record) = $testHandler->getRecords(); + $this->assertEquals($datetime->format('Y-m-d H:i:s'), $record['datetime']->format('Y-m-d H:i:s')); + } + } } class LoggingHandler implements HandlerInterface