Log.php

浏览该文件的文档。
00001 <?php
00003 // FleaPHP Framework
00004 //
00005 // Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com)
00006 //
00007 // 许可协议,请查看源代码中附带的 LICENSE.txt 文件,
00008 // 或者访问 http://www.fleaphp.org/ 获得详细信息。
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 }

Generated at Sat Feb 2 15:18:51 2008 for FleaPHP by  doxygen 1.5.3