Просмотр исходного кода

Optimize rotation so it's only done once per day at most

Jordi Boggiano 14 лет назад
Родитель
Сommit
45312dfc84
1 измененных файлов с 19 добавлено и 1 удалено
  1. 19 1
      src/Monolog/Handler/RotatingFileHandler.php

+ 19 - 1
src/Monolog/Handler/RotatingFileHandler.php

@@ -23,6 +23,7 @@ class RotatingFileHandler extends StreamHandler
 {
     protected $filename;
     protected $maxFiles;
+    protected $mustRotate;
 
     /**
      * @param string $filename
@@ -43,9 +44,26 @@ class RotatingFileHandler extends StreamHandler
             $timedFilename .= '.'.$fileInfo['extension'];
         }
 
+        // disable rotation upfront if files are unlimited
+        if (0 === $this->maxFiles) {
+            $this->mustRotate = false;
+        }
+
         parent::__construct($timedFilename, $level, $bubble);
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function write(array $record)
+    {
+        // on the first record written, if the log is new, we should rotate (once per day)
+        if (null === $this->mustRotate) {
+            $this->mustRotate = !file_exists($this->url);
+        }
+        return parent::write($record);
+    }
+
     /**
      * Closes the handler.
      */
@@ -53,7 +71,7 @@ class RotatingFileHandler extends StreamHandler
     {
         parent::close();
 
-        if (0 !== $this->maxFiles) {
+        if (true === $this->mustRotate) {
             $this->rotate();
         }
     }