瀏覽代碼

Fix RotatingFileHandler bug where rotation could sometimes not happen correctly, fixes #1905

Jordi Boggiano 1 年之前
父節點
當前提交
d57089bf87
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      src/Monolog/Handler/RotatingFileHandler.php

+ 6 - 3
src/Monolog/Handler/RotatingFileHandler.php

@@ -115,11 +115,14 @@ class RotatingFileHandler extends StreamHandler
         // on the first record written, if the log is new, we should rotate (once per day)
         if (null === $this->mustRotate) {
             $this->mustRotate = null === $this->url || !file_exists($this->url);
+            if ($this->mustRotate) {
+                $this->close(); // triggers rotation
+            }
         }
 
         if ($this->nextRotation <= $record['datetime']) {
             $this->mustRotate = true;
-            $this->close();
+            $this->close(); // triggers rotation
         }
 
         parent::write($record);
@@ -134,6 +137,8 @@ class RotatingFileHandler extends StreamHandler
         $this->url = $this->getTimedFilename();
         $this->nextRotation = new \DateTimeImmutable('tomorrow');
 
+        $this->mustRotate = false;
+
         // skip GC of old logs if files are unlimited
         if (0 === $this->maxFiles) {
             return;
@@ -166,8 +171,6 @@ class RotatingFileHandler extends StreamHandler
                 restore_error_handler();
             }
         }
-
-        $this->mustRotate = false;
     }
 
     protected function getTimedFilename(): string