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

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

WBOY
Release: 2016-06-20 12:32:44
Original
1534 people have browsed it

//以下为日志

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

?>


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template