2019-09-06 23:53:10 +08:00

287 lines
7.5 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class PhpLog {
const DEBUG = 1;// Most Verbose
const INFO = 2;// ...
const WARN = 3;// ...
const ERROR = 4;// ...
const FATAL = 5;// Least Verbose
const OFF = 6;// Nothing at all.
const LOG_OPEN = 1;
const OPEN_FAILED = 2;
const LOG_CLOSED = 3;
/* Public members: Not so much of an example of encapsulation, but that's okay. */
public $Log_Status = PhpLog::LOG_CLOSED;
public $DateFormat= "Y-m-d G:i:s";
public $MessageQueue;
private $filename;
private $log_file;
private $priority = PhpLog::INFO;
private $file_handle;
/**
* AUTHOR: gu_yongkang
* DATA: 20110322
* Enter description here ...
* @param $filepath
* 文件存储的路径
* @param $timezone
* 时间格式,此处设置为"PRC"(中国)
* @param $priority
* 设置运行级别
*/
public function __construct( $filepath, $timezone, $priority )
{
if ( $priority == PhpLog::OFF ) return;
$this->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]" . "------";
}
}
}