> 백엔드 개발 > PHP 튜토리얼 > 【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!

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

WBOY
풀어 주다: 2016-06-20 12:32:44
원래의
1504명이 탐색했습니다.

//以下为日志

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

?>


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿