当前位置:Gxlcms > PHP教程 > 【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!

【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!

时间:2021-07-01 10:21:17 帮助过:28人阅读

//以下为日志

define("LOG_OUTPUT_LEVEL",1); //1-为输出所有调试信息 1-DEBUG 2-INFO 4-WARN 8-ERROR


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,self::getFilePath(debug_backtrace()).$msg);

}

public static function WARN($msg)

{

self::$instance->write(4," ".self::getFilePath(debug_backtrace()).$msg);

}

public static function ERROR($msg)

{


self::$instance->write(8,self::getFilePath(debug_backtrace()).$msg);


}

public static function INFO($msg)

{

self::$instance->write(2," ".self::getFilePath(debug_backtrace()).$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:

}

}

public static function getFilePath($debugInfo){

$stack = "[";

foreach($debugInfo as $key => $val){

if(array_key_exists("file", $val)){

$stack .= "file:" . strstr($val["file"],'\cyb');

}

if(array_key_exists("line", $val)){

$stack .= ",line:" . $val["line"];

}

if(array_key_exists("function", $val)){

$stack .= ",function:" . $val["function"];

}

}

$stack .= "]";

return $stack;

}

protected function write($level,$msg)

{

if(($level & $this->level) == $level )

{

$msg = '['.date('Y-m-d H:i:s').']['.$this->getLevelStr($level).'] '.$msg."\r\n";

if($level>=LOG_OUTPUT_LEVEL){

$this->handler->write($msg);

}

}

}

}


2.php


include('log.php');

$FileName=$_SERVER['DOCUMENT_ROOT']."/log/".date('Ym',time()); //通过时间来做日志文件夹

if(!file_exists($FileName)){

mkdir($FileName,0777);//如果没有该文件夹,创建一个

}

Log::Init(new CLogFileHandler($FileName."/".date('Y-m-d',time()).'.txt')); //实例化一个文件夹

?>

人气教程排行