Преглед изворни кода

Added $datetime parameter to addRecord method to optionally log into the past/future

henning пре 3 година
родитељ
комит
24e414c993
2 измењених фајлова са 29 додато и 6 уклоњено
  1. 7 6
      src/Monolog/Logger.php
  2. 22 0
      tests/Monolog/LoggerTest.php

+ 7 - 6
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' => [],
                     ];
 

+ 22 - 0
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