123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- <?php
- namespace com\unionpay\acp\sdk;
- 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]" . "------";
- }
- }
- }
|