[ Index ] |
WordPress Cross Reference |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * $Id: Logger.class.php 10 2007-05-27 10:55:12Z spocke $ 4 * 5 * @package MCFileManager.filesystems 6 * @author Moxiecode 7 * @copyright Copyright © 2005, Moxiecode Systems AB, All rights reserved. 8 */ 9 10 // File type contstants 11 define('MC_LOGGER_DEBUG', 0); 12 define('MC_LOGGER_INFO', 10); 13 define('MC_LOGGER_WARN', 20); 14 define('MC_LOGGER_ERROR', 30); 15 define('MC_LOGGER_FATAL', 40); 16 17 /** 18 * Logging utility class. This class handles basic logging with levels, log rotation and custom log formats. It's 19 * designed to be compact but still powerful and flexible. 20 */ 21 class Moxiecode_Logger { 22 // Private fields 23 var $_path; 24 var $_filename; 25 var $_maxSize; 26 var $_maxFiles; 27 var $_maxSizeBytes; 28 var $_level; 29 var $_format; 30 31 /** 32 * Constructs a new logger instance. 33 */ 34 function Moxiecode_Logger() { 35 $this->_path = ""; 36 $this->_filename = "{level}.log"; 37 $this->setMaxSize("100k"); 38 $this->_maxFiles = 10; 39 $this->_level = MC_LOGGER_DEBUG; 40 $this->_format = "[{time}] [{level}] {message}"; 41 } 42 43 /** 44 * Sets the current log level, use the MC_LOGGER constants. 45 * 46 * @param int $level Log level instance for example MC_LOGGER_DEBUG. 47 */ 48 function setLevel($level) { 49 if (is_string($level)) { 50 switch (strtolower($level)) { 51 case "debug": 52 $level = MC_LOGGER_DEBUG; 53 break; 54 55 case "info": 56 $level = MC_LOGGER_INFO; 57 break; 58 59 case "warn": 60 case "warning": 61 $level = MC_LOGGER_WARN; 62 break; 63 64 case "error": 65 $level = MC_LOGGER_ERROR; 66 break; 67 68 case "fatal": 69 $level = MC_LOGGER_FATAL; 70 break; 71 72 default: 73 $level = MC_LOGGER_FATAL; 74 } 75 } 76 77 $this->_level = $level; 78 } 79 80 /** 81 * Returns the current log level for example MC_LOGGER_DEBUG. 82 * 83 * @return int Current log level for example MC_LOGGER_DEBUG. 84 */ 85 function getLevel() { 86 return $this->_level; 87 } 88 89 function setPath($path) { 90 $this->_path = $path; 91 } 92 93 function getPath() { 94 return $this->_path; 95 } 96 97 function setFileName($file_name) { 98 $this->_filename = $file_name; 99 } 100 101 function getFileName() { 102 return $this->_filename; 103 } 104 105 function setFormat($format) { 106 $this->_format = $format; 107 } 108 109 function getFormat() { 110 return $this->_format; 111 } 112 113 function setMaxSize($size) { 114 // Fix log max size 115 $logMaxSizeBytes = intval(preg_replace("/[^0-9]/", "", $size)); 116 117 // Is KB 118 if (strpos((strtolower($size)), "k") > 0) 119 $logMaxSizeBytes *= 1024; 120 121 // Is MB 122 if (strpos((strtolower($size)), "m") > 0) 123 $logMaxSizeBytes *= (1024 * 1024); 124 125 $this->_maxSizeBytes = $logMaxSizeBytes; 126 $this->_maxSize = $size; 127 } 128 129 function getMaxSize() { 130 return $this->_maxSize; 131 } 132 133 function setMaxFiles($max_files) { 134 $this->_maxFiles = $max_files; 135 } 136 137 function getMaxFiles() { 138 return $this->_maxFiles; 139 } 140 141 function debug($msg) { 142 $args = func_get_args(); 143 $this->_logMsg(MC_LOGGER_DEBUG, implode(', ', $args)); 144 } 145 146 function info($msg) { 147 $args = func_get_args(); 148 $this->_logMsg(MC_LOGGER_INFO, implode(', ', $args)); 149 } 150 151 function warn($msg) { 152 $args = func_get_args(); 153 $this->_logMsg(MC_LOGGER_WARN, implode(', ', $args)); 154 } 155 156 function error($msg) { 157 $args = func_get_args(); 158 $this->_logMsg(MC_LOGGER_ERROR, implode(', ', $args)); 159 } 160 161 function fatal($msg) { 162 $args = func_get_args(); 163 $this->_logMsg(MC_LOGGER_FATAL, implode(', ', $args)); 164 } 165 166 function isDebugEnabled() { 167 return $this->_level >= MC_LOGGER_DEBUG; 168 } 169 170 function isInfoEnabled() { 171 return $this->_level >= MC_LOGGER_INFO; 172 } 173 174 function isWarnEnabled() { 175 return $this->_level >= MC_LOGGER_WARN; 176 } 177 178 function isErrorEnabled() { 179 return $this->_level >= MC_LOGGER_ERROR; 180 } 181 182 function isFatalEnabled() { 183 return $this->_level >= MC_LOGGER_FATAL; 184 } 185 186 function _logMsg($level, $message) { 187 $roll = false; 188 189 if ($level < $this->_level) 190 return; 191 192 $logFile = $this->toOSPath($this->_path . "/" . $this->_filename); 193 194 switch ($level) { 195 case MC_LOGGER_DEBUG: 196 $levelName = "DEBUG"; 197 break; 198 199 case MC_LOGGER_INFO: 200 $levelName = "INFO"; 201 break; 202 203 case MC_LOGGER_WARN: 204 $levelName = "WARN"; 205 break; 206 207 case MC_LOGGER_ERROR: 208 $levelName = "ERROR"; 209 break; 210 211 case MC_LOGGER_FATAL: 212 $levelName = "FATAL"; 213 break; 214 } 215 216 $logFile = str_replace('{level}', strtolower($levelName), $logFile); 217 218 $text = $this->_format; 219 $text = str_replace('{time}', date("Y-m-d H:i:s"), $text); 220 $text = str_replace('{level}', strtolower($levelName), $text); 221 $text = str_replace('{message}', $message, $text); 222 $message = $text . "\r\n"; 223 224 // Check filesize 225 if (file_exists($logFile)) { 226 $size = @filesize($logFile); 227 228 if ($size + strlen($message) > $this->_maxSizeBytes) 229 $roll = true; 230 } 231 232 // Roll if the size is right 233 if ($roll) { 234 for ($i=$this->_maxFiles-1; $i>=1; $i--) { 235 $rfile = $this->toOSPath($logFile . "." . $i); 236 $nfile = $this->toOSPath($logFile . "." . ($i+1)); 237 238 if (@file_exists($rfile)) 239 @rename($rfile, $nfile); 240 } 241 242 @rename($logFile, $this->toOSPath($logFile . ".1")); 243 244 // Delete last logfile 245 $delfile = $this->toOSPath($logFile . "." . ($this->_maxFiles + 1)); 246 if (@file_exists($delfile)) 247 @unlink($delfile); 248 } 249 250 // Append log line 251 if (($fp = @fopen($logFile, "a")) != null) { 252 @fputs($fp, $message); 253 @fflush($fp); 254 @fclose($fp); 255 } 256 } 257 258 /** 259 * Converts a Unix path to OS specific path. 260 * 261 * @param String $path Unix path to convert. 262 */ 263 function toOSPath($path) { 264 return str_replace("/", DIRECTORY_SEPARATOR, $path); 265 } 266 } 267 268 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 25 01:41:18 2014 | WordPress honlapkĂ©szĂtĂ©s: online1.hu |