From 6e08ee9ac70a8df40cf9d2a6f102caa49c04c180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Fri, 20 Jun 2014 14:57:02 +0200 Subject: [PATCH] improved log fodder creation deleting of old log files --- application/core/Files/FileUtil.php | 32 ++++++++++++ application/core/Logger.php | 78 ++++++++++++++++++++--------- 2 files changed, 87 insertions(+), 23 deletions(-) diff --git a/application/core/Files/FileUtil.php b/application/core/Files/FileUtil.php index 9e0997c5..29f18a50 100644 --- a/application/core/Files/FileUtil.php +++ b/application/core/Files/FileUtil.php @@ -14,6 +14,7 @@ use ManiaControl\Utils\Formatter; * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 */ abstract class FileUtil { + /** * Load a remote file * @@ -186,4 +187,35 @@ abstract class FileUtil { } } } + + /** + * Delete old ManiaControl Log Files + * + * @param int $maxFileAgeInDays + * @return bool + */ + public static function deleteOldLogFiles($maxFileAgeInDays = 14) { + $logsFolderPath = Logger::getLogsFolderPath(); + if (!is_readable($logsFolderPath)) { + return false; + } + $dirHandle = opendir($logsFolderPath); + if (!is_resource($dirHandle)) { + return false; + } + $time = time(); + while ($fileName = readdir($dirHandle)) { + $filePath = $logsFolderPath . $fileName; + if (!is_readable($filePath)) { + continue; + } + $fileModTime = filemtime($filePath); + $timeDeltaDays = ($time - $fileModTime) / (24 * 3600); + if ($timeDeltaDays > $maxFileAgeInDays) { + unlink($filePath); + } + } + closedir($dirHandle); + return true; + } } diff --git a/application/core/Logger.php b/application/core/Logger.php index 3726c47f..d60c0413 100644 --- a/application/core/Logger.php +++ b/application/core/Logger.php @@ -2,6 +2,8 @@ namespace ManiaControl; +use ManiaControl\Files\FileUtil; + /** * ManiaControl Logger Class * @@ -15,19 +17,62 @@ class Logger { * Setup the Logging Mechanism */ public static function setup() { - $logFileName = ManiaControlDir . 'logs' . DIRECTORY_SEPARATOR; - if (!is_dir($logFileName) && !mkdir($logFileName)) { - echo "Couldn't create Logs Folder, please check the File Permissions!"; + self::setupErrorLogFileName(); + FileUtil::deleteOldLogFiles(); + } + + /** + * Set the Error Log File Name + */ + private function setupErrorLogFileName() { + $logsFolder = self::createLogsFolder(); + if ($logsFolder) { + $logFileName = $logsFolder . 'ManiaControl'; + if (LOG_NAME_USE_DATE) { + $logFileName .= '_' . date('Y-m-d'); + } + if (LOG_NAME_USE_PID) { + $logFileName .= '_' . getmypid(); + } + $logFileName .= '.log'; + ini_set('error_log', $logFileName); } - $logFileName .= 'ManiaControl'; - if (LOG_NAME_USE_DATE) { - $logFileName .= '_' . date('Y-m-d'); + } + + /** + * Create the Logs Folder and return its Path if successful + * + * @return bool|string + */ + private static function createLogsFolder() { + $logsFolderPath = self::getLogsFolderPath(); + if (!is_dir($logsFolderPath) && !mkdir($logsFolderPath)) { + self::output("Couldn't create Logs Folder, please check the File Permissions!"); + return false; } - if (LOG_NAME_USE_PID) { - $logFileName .= '_' . getmypid(); + return $logsFolderPath; + } + + /** + * Build the Logs Folder Path + * + * @return string + */ + public static function getLogsFolderPath() { + return ManiaControlDir . 'logs' . DIRECTORY_SEPARATOR; + } + + /** + * Echo the given Message + * + * @param string $message + * @param bool $eol + */ + public static function output($message, $eol = true) { + if ($eol) { + $message = '[' . date('d-M-Y H:i:s e') . '] ' . $message . PHP_EOL; } - $logFileName .= '.log'; - ini_set('error_log', $logFileName); + echo $message; } /** @@ -56,19 +101,6 @@ class Logger { } } - /** - * Echo the given Message - * - * @param string $message - * @param bool $eol - */ - public static function output($message, $eol = true) { - if ($eol) { - $message = '[' . date('d-M-Y H:i:s e') . '] ' . $message . PHP_EOL; - } - echo $message; - } - /** * Log and echo the given Info Message *