Open-Source PHP Framework - Designed for rapid development of performance-oriented scalable applications

/webroot/js/tinymce/plugins/spellchecker/classes/utils/Logger.php

[return to app]
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_DEBUGimplode(', '$args));
144     }
145
146     function 
info($msg) {
147         
$args func_get_args();
148         
$this->_logMsg(MC_LOGGER_INFOimplode(', '$args));
149     }
150
151     function 
warn($msg) {
152         
$args func_get_args();
153         
$this->_logMsg(MC_LOGGER_WARNimplode(', '$args));
154     }
155
156     function 
error($msg) {
157         
$args func_get_args();
158         
$this->_logMsg(MC_LOGGER_ERRORimplode(', '$args));
159     }
160
161     function 
fatal($msg) {
162         
$args func_get_args();
163         
$this->_logMsg(MC_LOGGER_FATALimplode(', '$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
?>