filename = $filename; $this->maxFiles = $maxFiles; parent::__construct($config, $this->getTimedFilename(), $level, $bubble); $this->rotate(); } /** * @return void */ protected function rotate() { if (0 === $this->maxFiles) { return; // unlimited number of files for 0 } $filePattern = $this->getFilePattern(); $dirPath = $this->fileManager->getDirName($this->filename); /** @var string[] $logFiles */ $logFiles = $this->fileManager->getFileList($dirPath, false, $filePattern, true); if (!empty($logFiles) && count($logFiles) > $this->maxFiles) { usort($logFiles, function ($a, $b) { return strcmp($b, $a); }); $logFilesToBeRemoved = array_slice($logFiles, $this->maxFiles); $this->fileManager->removeFile($logFilesToBeRemoved, $dirPath); } } /** * @return string */ protected function getTimedFilename() { $fileInfo = pathinfo($this->filename); $timedFilename = str_replace( ['{filename}', '{date}'], [$fileInfo['filename'], date($this->dateFormat)], ($fileInfo['dirname'] ?? '') . '/' . $this->filenameFormat ); if (!empty($fileInfo['extension'])) { $timedFilename .= '.' . $fileInfo['extension']; } return $timedFilename; } /** * @return string */ protected function getFilePattern() { $fileInfo = pathinfo($this->filename); $glob = str_replace( ['{filename}', '{date}'], [$fileInfo['filename'], '.*'], $this->filenameFormat ); if (!empty($fileInfo['extension'])) { $glob .= '\.'.$fileInfo['extension']; } return '^' . $glob . '$'; } }