须知
该打印log的代码出自wxPay支付样例里的 log.php 文件 使用该文件时,直接引入即可, 但是需要在同级目录下手动创建logs文件夹
使用样例
require_once "log.php"
Log :: INFO ( "使用打印日志" ) ;
源码
<?php
interface ILogHandler
{
public function write ( $msg ) ;
}
class CLogFileHandler implements ILogHandler
{
private $handle = null ;
public function __construct ( $file = '' )
{
$this -> handle = fopen ( $file , 'a' ) ;
}
public function write ( $msg )
{
fwrite ( $this -> handle , $msg , 4096 ) ;
}
public function __destruct ( )
{
fclose ( $this -> handle ) ;
}
}
class Log
{
private $handler = null ;
private $level = 15 ;
private static $instance = null ;
private function __construct ( )
{
}
private function __clone ( )
{
}
public static function Init ( $handler = null , $level = 15 )
{
if ( ! self :: $instance instanceof self ) {
self :: $instance = new self ( ) ;
self :: $instance -> __setHandle ( $handler ) ;
self :: $instance -> __setLevel ( $level ) ;
}
return self :: $instance ;
}
private function __setHandle ( $handler )
{
$this -> handler = $handler ;
}
private function __setLevel ( $level )
{
$this -> level = $level ;
}
public static function DEBUG ( $msg )
{
self :: $instance -> write ( 1 , $msg ) ;
}
public static function WARN ( $msg )
{
self :: $instance -> write ( 4 , $msg ) ;
}
public static function ERROR ( $msg )
{
$debugInfo = debug_backtrace ( ) ;
$stack = "[" ;
foreach ( $debugInfo as $key => $val ) {
if ( array_key_exists ( "file" , $val ) ) {
$stack .= ",file:" . $val [ "file" ] ;
}
if ( array_key_exists ( "line" , $val ) ) {
$stack .= ",line:" . $val [ "line" ] ;
}
if ( array_key_exists ( "function" , $val ) ) {
$stack .= ",function:" . $val [ "function" ] ;
}
}
$stack .= "]" ;
self :: $instance -> write ( 8 , $stack . $msg ) ;
}
public static function INFO ( $msg )
{
self :: $instance -> write ( 2 , $msg ) ;
}
private function getLevelStr ( $level )
{
switch ( $level ) {
case 1 :
return 'debug' ;
break ;
case 2 :
return 'info' ;
break ;
case 4 :
return 'warn' ;
break ;
case 8 :
return 'error' ;
break ;
default :
break ;
}
}
protected function write ( $level , $msg )
{
if ( ( $level & $this -> level ) == $level ) {
$msg = '[' . date ( 'Y-m-d H:i:s' ) . '][' . $this -> getLevelStr ( $level ) . '] ' . $msg . "\n" ;
$this -> handler -> write ( $msg ) ;
}
}
}
$logHandler = new CLogFileHandler ( "logs/" . date ( 'Y-m-d' ) . '.log' ) ;
$log = Log :: Init ( $logHandler , 15 ) ;