文档章节

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

RablePHP
 RablePHP
发布于 2016/04/05 09:49
字数 363
阅读 88
收藏 5

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

<?php
//以下为日志
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
<?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')); //实例化一个文件夹
?>

© 著作权归作者所有

RablePHP
粉丝 15
博文 47
码字总数 11895
作品 0
巴南
程序员
私信 提问
PHP设计模式之单例模式学习

单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要想很好的运用到项目上也是需要一定的实践,不能只是知道了解,或者说的是...

mysoftsky
2013/05/27
168
0
在JavaScript中理解策略模式

设计模式是: 在面向对象软件过程中针对特定问题的简洁而优雅的解决方案. 通过对封装、继承、多态、组合等技术的反复利用, 提炼出可重复使用面向对象的设计技巧. JavaScript 可以模拟实现传统...

夜曉宸
01/27
0
0
浅谈桥(Bridge)设计模式

设计模式是一种思想,是一种表达方法,充分理解设计模式,能很好的举出各种设计模式的隐喻,然后在日常的代码工作中,将设计模式的思想实现到我们的代码中,好的设计模式能使我们的代码有更好...

欧阳俊文
2012/11/09
371
0
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

密码加密与微服务鉴权JWT详细使用教程

[TOC] 1.1、了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性。 什么是无状态? 1.服务端不保存任何客户端请求者信...

庭前云落
13分钟前
5
0
Xamarin.FormsShell基础教程(9)Shell相关类体系

Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类。Shell类实现了大多数应用程序所需的基本UI功能的页面。除此以外,常用的类还有ShellContent、Tab、Fly...

大学霸
15分钟前
3
0
聊聊MVC、MVP、MVVM吧

先来介绍下本文结构: 三种框架的具体概念 在安卓开发上的写法、优缺点 1.概念 1.1 MVC MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模...

二营长的意大利炮手
32分钟前
3
0
如果解释Python,什么是.pyc文件?

我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”。 这些来自哪里? #1楼 Python代码经历了两个阶段。 第...

javail
37分钟前
3
0
.NET Core初览

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算 TODO

梦想游戏人
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部