欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-26 18:02:34
...

//以下为日志

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')); //实例化一个文件夹

?>