+++ /dev/null
-<?php\r
-/**\r
- * $Id: Logger.class.php 10 2007-05-27 10:55:12Z spocke $\r
- *\r
- * @package MCFileManager.filesystems\r
- * @author Moxiecode\r
- * @copyright Copyright © 2005, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-// File type contstants\r
-define('MC_LOGGER_DEBUG', 0);\r
-define('MC_LOGGER_INFO', 10);\r
-define('MC_LOGGER_WARN', 20);\r
-define('MC_LOGGER_ERROR', 30);\r
-define('MC_LOGGER_FATAL', 40);\r
-\r
-/**\r
- * Logging utility class. This class handles basic logging with levels, log rotation and custom log formats. It's\r
- * designed to be compact but still powerful and flexible.\r
- */\r
-class Moxiecode_Logger {\r
- // Private fields\r
- var $_path;\r
- var $_filename;\r
- var $_maxSize;\r
- var $_maxFiles;\r
- var $_maxSizeBytes;\r
- var $_level;\r
- var $_format;\r
-\r
- /**\r
- * Constructs a new logger instance.\r
- */\r
- function Moxiecode_Logger() {\r
- $this->_path = "";\r
- $this->_filename = "{level}.log";\r
- $this->setMaxSize("100k");\r
- $this->_maxFiles = 10;\r
- $this->_level = MC_LOGGER_DEBUG;\r
- $this->_format = "[{time}] [{level}] {message}";\r
- }\r
-\r
- /**\r
- * Sets the current log level, use the MC_LOGGER constants.\r
- *\r
- * @param int $level Log level instance for example MC_LOGGER_DEBUG.\r
- */\r
- function setLevel($level) {\r
- if (is_string($level)) {\r
- switch (strtolower($level)) {\r
- case "debug":\r
- $level = MC_LOGGER_DEBUG;\r
- break;\r
-\r
- case "info":\r
- $level = MC_LOGGER_INFO;\r
- break;\r
-\r
- case "warn":\r
- case "warning":\r
- $level = MC_LOGGER_WARN;\r
- break;\r
-\r
- case "error":\r
- $level = MC_LOGGER_ERROR;\r
- break;\r
-\r
- case "fatal":\r
- $level = MC_LOGGER_FATAL;\r
- break;\r
-\r
- default:\r
- $level = MC_LOGGER_FATAL;\r
- }\r
- }\r
-\r
- $this->_level = $level;\r
- }\r
-\r
- /**\r
- * Returns the current log level for example MC_LOGGER_DEBUG.\r
- *\r
- * @return int Current log level for example MC_LOGGER_DEBUG.\r
- */\r
- function getLevel() {\r
- return $this->_level;\r
- }\r
-\r
- function setPath($path) {\r
- $this->_path = $path;\r
- }\r
-\r
- function getPath() {\r
- return $this->_path;\r
- }\r
-\r
- function setFileName($file_name) {\r
- $this->_filename = $file_name;\r
- }\r
-\r
- function getFileName() {\r
- return $this->_filename;\r
- }\r
-\r
- function setFormat($format) {\r
- $this->_format = $format;\r
- }\r
-\r
- function getFormat() {\r
- return $this->_format;\r
- }\r
-\r
- function setMaxSize($size) {\r
- // Fix log max size\r
- $logMaxSizeBytes = intval(preg_replace("/[^0-9]/", "", $size));\r
-\r
- // Is KB\r
- if (strpos((strtolower($size)), "k") > 0)\r
- $logMaxSizeBytes *= 1024;\r
-\r
- // Is MB\r
- if (strpos((strtolower($size)), "m") > 0)\r
- $logMaxSizeBytes *= (1024 * 1024);\r
-\r
- $this->_maxSizeBytes = $logMaxSizeBytes;\r
- $this->_maxSize = $size;\r
- }\r
-\r
- function getMaxSize() {\r
- return $this->_maxSize;\r
- }\r
-\r
- function setMaxFiles($max_files) {\r
- $this->_maxFiles = $max_files;\r
- }\r
-\r
- function getMaxFiles() {\r
- return $this->_maxFiles;\r
- }\r
-\r
- function debug($msg) {\r
- $args = func_get_args();\r
- $this->_logMsg(MC_LOGGER_DEBUG, implode(', ', $args));\r
- }\r
-\r
- function info($msg) {\r
- $args = func_get_args();\r
- $this->_logMsg(MC_LOGGER_INFO, implode(', ', $args));\r
- }\r
-\r
- function warn($msg) {\r
- $args = func_get_args();\r
- $this->_logMsg(MC_LOGGER_WARN, implode(', ', $args));\r
- }\r
-\r
- function error($msg) {\r
- $args = func_get_args();\r
- $this->_logMsg(MC_LOGGER_ERROR, implode(', ', $args));\r
- }\r
-\r
- function fatal($msg) {\r
- $args = func_get_args();\r
- $this->_logMsg(MC_LOGGER_FATAL, implode(', ', $args));\r
- }\r
-\r
- function isDebugEnabled() {\r
- return $this->_level >= MC_LOGGER_DEBUG;\r
- }\r
-\r
- function isInfoEnabled() {\r
- return $this->_level >= MC_LOGGER_INFO;\r
- }\r
-\r
- function isWarnEnabled() {\r
- return $this->_level >= MC_LOGGER_WARN;\r
- }\r
-\r
- function isErrorEnabled() {\r
- return $this->_level >= MC_LOGGER_ERROR;\r
- }\r
-\r
- function isFatalEnabled() {\r
- return $this->_level >= MC_LOGGER_FATAL;\r
- }\r
-\r
- function _logMsg($level, $message) {\r
- $roll = false;\r
-\r
- if ($level < $this->_level)\r
- return;\r
-\r
- $logFile = $this->toOSPath($this->_path . "/" . $this->_filename);\r
-\r
- switch ($level) {\r
- case MC_LOGGER_DEBUG:\r
- $levelName = "DEBUG";\r
- break;\r
-\r
- case MC_LOGGER_INFO:\r
- $levelName = "INFO";\r
- break;\r
-\r
- case MC_LOGGER_WARN:\r
- $levelName = "WARN";\r
- break;\r
-\r
- case MC_LOGGER_ERROR:\r
- $levelName = "ERROR";\r
- break;\r
-\r
- case MC_LOGGER_FATAL:\r
- $levelName = "FATAL";\r
- break;\r
- }\r
-\r
- $logFile = str_replace('{level}', strtolower($levelName), $logFile);\r
-\r
- $text = $this->_format;\r
- $text = str_replace('{time}', date("Y-m-d H:i:s"), $text);\r
- $text = str_replace('{level}', strtolower($levelName), $text);\r
- $text = str_replace('{message}', $message, $text);\r
- $message = $text . "\r\n";\r
-\r
- // Check filesize\r
- if (file_exists($logFile)) {\r
- $size = @filesize($logFile);\r
-\r
- if ($size + strlen($message) > $this->_maxSizeBytes)\r
- $roll = true;\r
- }\r
-\r
- // Roll if the size is right\r
- if ($roll) {\r
- for ($i=$this->_maxFiles-1; $i>=1; $i--) {\r
- $rfile = $this->toOSPath($logFile . "." . $i);\r
- $nfile = $this->toOSPath($logFile . "." . ($i+1));\r
-\r
- if (@file_exists($rfile))\r
- @rename($rfile, $nfile);\r
- }\r
-\r
- @rename($logFile, $this->toOSPath($logFile . ".1"));\r
-\r
- // Delete last logfile\r
- $delfile = $this->toOSPath($logFile . "." . ($this->_maxFiles + 1));\r
- if (@file_exists($delfile))\r
- @unlink($delfile);\r
- }\r
-\r
- // Append log line\r
- if (($fp = @fopen($logFile, "a")) != null) {\r
- @fputs($fp, $message);\r
- @fflush($fp);\r
- @fclose($fp);\r
- }\r
- }\r
-\r
- /**\r
- * Converts a Unix path to OS specific path.\r
- *\r
- * @param String $path Unix path to convert.\r
- */\r
- function toOSPath($path) {\r
- return str_replace("/", DIRECTORY_SEPARATOR, $path);\r
- }\r
-}\r
-\r
-?>
\ No newline at end of file