00001 <?php
00003
00004
00005
00006
00007
00008
00010
00026 function log_message($msg, $level = 'log', $title = '')
00027 {
00028 static $instance = null;
00029
00030 if (is_null($instance)) {
00031 $instance = array();
00032 $obj =& FLEA::getSingleton('FLEA_Log');
00033 $instance = array('obj' => & $obj);
00034 }
00035
00036 return $instance['obj']->appendLog($msg, $level, $title);
00037 }
00038
00046 class FLEA_Log
00047 {
00053 var $_log = '';
00054
00060 var $dateFormat = 'Y-m-d H:i:s';
00061
00067 var $_logFileDir;
00068
00074 var $_logFilename;
00075
00081 var $_enabled = true;
00082
00088 var $_errorLevel;
00089
00095 function FLEA_Log()
00096 {
00097 $dir = FLEA::getAppInf('logFileDir');
00098 if (empty($dir)) {
00099
00100 $dir = FLEA::getAppInf('internalCacheDir');
00101 }
00102 $dir = realpath($dir);
00103 if (substr($dir, -1) != DIRECTORY_SEPARATOR) {
00104 $dir .= DIRECTORY_SEPARATOR;
00105 }
00106 if (!is_dir($dir) || !is_writable($dir)) {
00107 $this->_enabled = false;
00108 } else {
00109 $this->_logFileDir = $dir;
00110 $this->_logFilename = $this->_logFileDir . FLEA::getAppInf('logFilename');
00111 $errorLevel = explode(',', strtolower(FLEA::getAppInf('logErrorLevel')));
00112 $errorLevel = array_map('trim', $errorLevel);
00113 $errorLevel = array_filter($errorLevel, 'trim');
00114 $this->_errorLevel = array();
00115 foreach ($errorLevel as $e) {
00116 $this->_errorLevel[$e] = true;
00117 }
00118
00119 global $___fleaphp_loaded_time;
00120 list($usec, $sec) = explode(" ", $___fleaphp_loaded_time);
00121 $this->_log = sprintf("[%s %s] ======= FleaPHP Loaded =======\n",
00122 date($this->dateFormat, $sec), $usec);
00123
00124 if (isset($_SERVER['REQUEST_URI'])) {
00125 $this->_log .= sprintf("[%s] REQUEST_URI: %s\n",
00126 date($this->dateFormat),
00127 $_SERVER['REQUEST_URI']);
00128 }
00129
00130
00131 register_shutdown_function(array(& $this, '__writeLog'));
00132
00133
00134 if (file_exists($this->_logFilename)) {
00135 $filesize = filesize($this->_logFilename);
00136 } else {
00137 $filesize = 0;
00138 }
00139 $maxsize = (int)FLEA::getAppInf('logFileMaxSize');
00140 if ($maxsize >= 512) {
00141 $maxsize = $maxsize * 1024;
00142 if ($filesize >= $maxsize) {
00143
00144 $pathinfo = pathinfo($this->_logFilename);
00145 $newFilename = $pathinfo['dirname'] . DS .
00146 basename($pathinfo['basename'], '.' . $pathinfo['extension']) .
00147 date('-Ymd-His') . '.' . $pathinfo['extension'];
00148 rename($this->_logFilename, $newFilename);
00149 }
00150 }
00151 }
00152 }
00153
00160 function appendLog($msg, $level = 'log', $title = '')
00161 {
00162 if (!$this->_enabled) { return; }
00163 $level = strtolower($level);
00164 if (!isset($this->_errorLevel[$level])) { return; }
00165
00166 $msg = sprintf("[%s] [%s] %s:%s\n", date($this->dateFormat), $level, $title, print_r($msg, true));
00167 $this->_log .= $msg;
00168 }
00169
00173 function __writeLog()
00174 {
00175 global $___fleaphp_loaded_time;
00176
00177
00178 list($usec, $sec) = explode(" ", $___fleaphp_loaded_time);
00179 $beginTime = (float)$sec + (float)$usec;
00180 $endTime = microtime();
00181 list($usec, $sec) = explode(" ", $endTime);
00182 $endTime = (float)$sec + (float)$usec;
00183 $elapsedTime = $endTime - $beginTime;
00184 $this->_log .= sprintf("[%s %s] ======= FleaPHP End (elapsed: %f seconds) =======\n\n",
00185 date($this->dateFormat, $sec), $usec, $elapsedTime);
00186
00187 $fp = fopen($this->_logFilename, 'a');
00188 if (!$fp) { return; }
00189 flock($fp, LOCK_EX);
00190 fwrite($fp, str_replace("\r", '', $this->_log));
00191 flock($fp, LOCK_UN);
00192 fclose($fp);
00193 }
00194 }