filename = date('Y-m-d', time()) . '.log'; //默认为以时间+.log的文件文件 $this->log_file = $this->createPath($filepath, $this->filename); $this->MessageQueue = array(); $this->priority = $priority; date_default_timezone_set($timezone); if ( !file_exists($filepath) ) //判断文件路径是否存在 { if(!empty($filepath)) //判断路径是否为空 { if(!($this->_createDir($filepath))) { $this->Log_Status = PhpLog::OPEN_FAILED; $this->MessageQueue[] = "Create file failed."; return; } if ( !is_writable($this->log_file) ) { $this->Log_Status = PhpLog::OPEN_FAILED; $this->MessageQueue[] = "The file exists, but could not be opened for writing. Check that appropriate permissions have been set."; return; } } } if ( $this->file_handle = fopen( $this->log_file , "a+" ) ) { $this->Log_Status = PhpLog::LOG_OPEN; $this->MessageQueue[] = "The log file was opened successfully."; } else { $this->Log_Status = PhpLog::OPEN_FAILED; $this->MessageQueue[] = "The file could not be opened. Check permissions."; } return; } public function __destruct() { if ( $this->file_handle ) fclose( $this->file_handle ); } /** *作用:创建目录 *输入:要创建的目录 *输出:true | false */ private function _createDir($dir) { // return is_dir($dir) or (self::_createDir(dirname($dir)) and mkdir($dir, 0777)); return false; } /** *作用:构建路径 *输入:文件的路径,要写入的文件名 *输出:构建好的路径字串 */ private function createPath($dir, $filename) { if (empty($dir)) { return $filename; } else { return $dir . "/" . $filename; } } public function LogInfo($line) { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; $this->Log( $line, PhpLog::INFO, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); } public function LogDebug($line) { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; $this->Log( $line, PhpLog::DEBUG, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); } public function LogWarn($line) { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; $this->Log( $line, PhpLog::WARN, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); } public function LogError($line) { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; $this->Log( $line, PhpLog::ERROR, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); } public function LogFatal($line) { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; $this->Log( $line, PhpLog::FATAL, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); } /** * Author : gu_yongkang * Enter description here ... * @param unknown_type $line * content 内容 * @param unknown_type $priority * 打印级别 * @param unknown_type $sFile * 调用打印日志的文件名 * @param unknown_type $iLine * 打印文件的位置(行数) */ public function Log($line, $priority, $sFile, $iLine) { if ($iLine > 0) { //$line = iconv('GBK', 'UTF-8', $line); if ( $this->priority <= $priority ) { $status = $this->getTimeLine( $priority, $sFile, $iLine); $this->WriteFreeFormLine ( "$status $line \n" ); } } else { /** * AUTHOR : gu_yongkang * 增加打印函数和文件名的功能 */ $sAarray = array(); $sAarray = debug_backtrace(); $sGetFilePath = $sAarray[0]["file"]; $sGetFileLine = $sAarray[0]["line"]; if ( $this->priority <= $priority ) { $status = $this->getTimeLine( $priority, $sGetFilePath, $sGetFileLine); unset($sAarray); unset($sGetFilePath); unset($sGetFileLine); $this->WriteFreeFormLine ( "$status $line \n" ); } } } // 支持输入多个参数 public function WriteFreeFormLine( $line ) { if ( $this->Log_Status == PhpLog::LOG_OPEN && $this->priority != PhpLog::OFF ) { if (fwrite( $this->file_handle , $line ) === false) { $this->MessageQueue[] = "The file could not be written to. Check that appropriate permissions have been set."; } } } private function getRemoteIP() { foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach (explode(',', $_SERVER[$key]) as $ip) { $ip = trim($ip); if (!empty($ip)) { return $ip; } } } } return "_NO_IP"; } private function getTimeLine( $level, $FilePath, $FileLine) { $time = date( $this->DateFormat ); $ip = $this->getRemoteIP(); switch( $level ) { case PhpLog::INFO: return "$time, " . "INFO, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; case PhpLog::WARN: return "$time, " . "WARN, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; case PhpLog::DEBUG: return "$time, " . "DEBUG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; case PhpLog::ERROR: return "$time, " . "ERROR, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; case PhpLog::FATAL: return "$time, " . "FATAL, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; default: return "$time, " . "LOG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------"; } } }