mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-06 21:26:43 +02:00
Force log rotation on a daily basis even for long running processes, fixes #166
This commit is contained in:
@@ -20,12 +20,14 @@ use Monolog\Logger;
|
|||||||
* handle the rotation is strongly encouraged when you can use it.
|
* handle the rotation is strongly encouraged when you can use it.
|
||||||
*
|
*
|
||||||
* @author Christophe Coevoet <stof@notk.org>
|
* @author Christophe Coevoet <stof@notk.org>
|
||||||
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||||
*/
|
*/
|
||||||
class RotatingFileHandler extends StreamHandler
|
class RotatingFileHandler extends StreamHandler
|
||||||
{
|
{
|
||||||
protected $filename;
|
protected $filename;
|
||||||
protected $maxFiles;
|
protected $maxFiles;
|
||||||
protected $mustRotate;
|
protected $mustRotate;
|
||||||
|
protected $nextRotation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $filename
|
* @param string $filename
|
||||||
@@ -37,19 +39,9 @@ class RotatingFileHandler extends StreamHandler
|
|||||||
{
|
{
|
||||||
$this->filename = $filename;
|
$this->filename = $filename;
|
||||||
$this->maxFiles = (int) $maxFiles;
|
$this->maxFiles = (int) $maxFiles;
|
||||||
|
$this->nextRotation = new \DateTime('tomorrow');
|
||||||
|
|
||||||
$fileInfo = pathinfo($this->filename);
|
parent::__construct($this->getTimedFilename(), $level, $bubble);
|
||||||
$timedFilename = $fileInfo['dirname'].'/'.$fileInfo['filename'].'-'.date('Y-m-d');
|
|
||||||
if (!empty($fileInfo['extension'])) {
|
|
||||||
$timedFilename .= '.'.$fileInfo['extension'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// disable rotation upfront if files are unlimited
|
|
||||||
if (0 === $this->maxFiles) {
|
|
||||||
$this->mustRotate = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
parent::__construct($timedFilename, $level, $bubble);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,6 +66,11 @@ class RotatingFileHandler extends StreamHandler
|
|||||||
$this->mustRotate = !file_exists($this->url);
|
$this->mustRotate = !file_exists($this->url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->nextRotation < $record['datetime']) {
|
||||||
|
$this->mustRotate = true;
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
parent::write($record);
|
parent::write($record);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +79,15 @@ class RotatingFileHandler extends StreamHandler
|
|||||||
*/
|
*/
|
||||||
protected function rotate()
|
protected function rotate()
|
||||||
{
|
{
|
||||||
|
// update filename
|
||||||
|
$this->url = $this->getTimedFilename();
|
||||||
|
$this->nextRotation = new \DateTime('tomorrow');
|
||||||
|
|
||||||
|
// skip GC of old logs if files are unlimited
|
||||||
|
if (0 === $this->maxFiles) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$fileInfo = pathinfo($this->filename);
|
$fileInfo = pathinfo($this->filename);
|
||||||
$glob = $fileInfo['dirname'].'/'.$fileInfo['filename'].'-*';
|
$glob = $fileInfo['dirname'].'/'.$fileInfo['filename'].'-*';
|
||||||
if (!empty($fileInfo['extension'])) {
|
if (!empty($fileInfo['extension'])) {
|
||||||
@@ -106,4 +112,15 @@ class RotatingFileHandler extends StreamHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getTimedFilename()
|
||||||
|
{
|
||||||
|
$fileInfo = pathinfo($this->filename);
|
||||||
|
$timedFilename = $fileInfo['dirname'].'/'.$fileInfo['filename'].'-'.date('Y-m-d');
|
||||||
|
if (!empty($fileInfo['extension'])) {
|
||||||
|
$timedFilename .= '.'.$fileInfo['extension'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $timedFilename;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user