对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录。

/**

* 日志处理类

*

* @since alpha 0.0.1

* @date 2014.03.04

* @author genialx

*

*/

class Log{

//单例模式

private static $instance    = NULL;

//文件句柄

private static $handle      = NULL;

//日志开关

private $log_switch     = NULL;

//日志相对目录

private $log_file_path      = NULL;

//日志文件最大长度,超出长度重新建立文件

private $log_max_len        = NULL;

//日志文件前缀,入 log_0

private $log_file_pre       = 'log_';

/**

* 构造函数

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

protected function __construct(){//注意:以下是配置文件中的常量,请读者自行更改

$this->log_file_path     = LOG_FILE_PATH;

$this->log_switch     = LOG_SWITCH;

$this->log_max_len    = LOG_MAX_LEN;

}

/**

* 单利模式

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

public static function get_instance(){

if(!self::$instance instanceof self){

self::$instance = new self;

}

return self::$instance;

}

/**

*

* 日志记录

*

* @param int $type  0 -> 记录(THING LOG) / 1 -> 错误(ERROR LOG)

* @param string $desc

* @param string $time

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*

*/

public function log($type,$desc,$time){

if($this->log_switch){

if(self::$handle == NULL){

$filename = $this->log_file_pre . $this->get_max_log_file_suf();

self::$handle = fopen($this->log_file_path . $filename, 'a');

}

switch($type){

case 0:

fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));

break;

case 1:

fwrite(self::$handle, 'ERROR LOG:' . ' ' . $desc . ' ' . $time . chr(13));

break;

default:

fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));

break;

}

}

}

/**

* 获取当前日志的最新文档的后缀

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

private function get_max_log_file_suf(){

$log_file_suf = null;

if(is_dir($this->log_file_path)){

if($dh = opendir($this->log_file_path)){

while(($file = readdir($dh)) != FALSE){

if($file != '.' && $file != '..'){

if(filetype( $this->log_file_path . $file) == 'file'){

$rs = split('_', $file);

if($log_file_suf < $rs[1]){

$log_file_suf = $rs[1];

}

}

}

}

if($log_file_suf == NULL){

$log_file_suf = 0;

}

//截断文件

if( file_exists($this->log_file_path . $this->log_file_pre . $log_file_suf) && filesize($this->log_file_path . $this->log_file_pre . $log_file_suf) >= $this->log_max_len){

$log_file_suf = intval($log_file_suf) + 1;

}

return $log_file_suf;

}

}

return 0;

}

/**

* 关闭文件句柄

*

* @since alpha 0.0.1

* @date 2014.02.04

* @author genialx

*/

public function close(){

fclose(self::$handle);

}

}

功能说明:

该日志类利用单例模式,节省资源。自行判断文件大小,超出指定大小则按序自行创建文件。如:文件log_0大于指定大小,则重新创建log_1文件(注意:创建文件是安装文件名后缀的数字的,请勿随意更改日志文件名)。

有待优化:没有指定文件的最大个数,所以定期要手动删除过多的日志文件。

调用示例:

//LOG

$L = Log::get_instance();

//第一个参数 int 0代表事件记录(THING LOG:),1代表错误记录(ERROR LOG:)

//第二个参数 string 描述文字

//第三个参数 string 时间

$L->log(1,'日志描述', date('Y-n-j H:m:s'));

$L->close();

用php编写一个日志系统,php利用单例模式实现日志处理类库相关推荐

  1. c语言中如何设计和编写一个应用系统?

    C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如" ...

  2. 编写一个“绘画系统”

    在最后一次的作业中,老师让我们编写一个"绘画系统",提供一系列绘画材料(例如画笔/颜料/滤镜)给用户操作,以创作出动态/交互的绘画作品.这个绘画系统是对"绘画" ...

  3. ppt编写一个抽奖系统

    本文是用ppt制作一个抽奖系统,点击开始抽取时,屏幕会随机滚动数字,点击停止滚动即显示抽取到的数字. 实现效果,请下载我的作品进行查看:http://download.csdn.net/detail/ ...

  4. docker(10、日志管理4)5、Graylog 日志系统(1、部署Graylog日志系统,2、Graylog管理日志)

    部署Graylog日志系统 Graylog 是与 ELK 可以相提并论的一款几种式日志管理方案,支持数据收集.检索.可视化Dashboard. 将实践用Graylog来管理Docker日志 Grayl ...

  5. 计算机毕业设计中用Java编写一个订餐系统(JAVA SWING)

    一. 开发技术 JDK:JDK1.8,JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+J ...

  6. ppt编写一个抽奖系统_自己动手用PPT做个抽奖器

    龙源期刊网 http://www.qikan.com.cn 自己动手用 PPT 做个抽奖器 作者:俞木发 来源:<电脑爱好者> 2017 年第 21 期 喜欢看电视的朋友可能都知道,某电视 ...

  7. ppt编写一个抽奖系统_PPT小技巧-制作简易抽奖幻灯片

    哈喽,小编最近工作繁忙,一不小心停更了半个多月,不知大家是否想念小编,系统确实是想念了小编哒~归正传,直奔今天的主题,小编来教大家一个简单的制作抽奖的方法,以后有个小活动或者年会的时候就可以小露一手了 ...

  8. Android编写一个登录界面,利用数据库实现记住密码,注册账号,强制下线,以及类似QQ的下拉列表登录功能

    首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧! 1.建立一个所有活动的父类,继承自Appcompat ...

  9. python用一行代码编写一个回声程序_利用Python实现一个WC程序

    项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数 ...

最新文章

  1. 【原创】大叔经验分享(65)spark读取不到hive表
  2. Wiki为什么会流行
  3. python include_tag_详解Python的Django框架中inclusion_tag的使用
  4. 了不起的Virtual DOM(一):起源
  5. Cissp-【第3章 安全工程】-2021-1-31(205页-237页)
  6. oracle忘记密码
  7. Linux——线程(总结)
  8. 工业用微型计算机(26)-伪操作(2)
  9. 均匀白噪声的定义及特点_噪声的物理本质是什么?
  10. java dfa_java 实现DFA 算法(理论百度搜索)
  11. tensorboard运行
  12. bash shell 中时间操作常用方法总结
  13. 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?
  14. JavaScript语言精粹(修订版)
  15. 经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
  16. 4米乘以12米CAD图_【超干货】CAD铺装排版下料之路径阵列
  17. word如何去掉标题前面的黑点
  18. 假定1km长的CSMA/CD网络的数据率为1Gbit/s。设信号在网络上的传输速率为200000km/s.求能够使用此协议的最短帧长。
  19. asp.net web压力测试
  20. 第二章华氏度摄氏度转换

热门文章

  1. php5.3教程,Php 5.3发布
  2. Android 发起加入QQ群、打开网址、启动拨打电话界面
  3. Makefile的学习
  4. linux之tar命令使用总结
  5. Tree的前序序列化
  6. 查询工资最低的3名员工的职工工号、姓名和收入_普法课堂|你有多久没有收到工资条了?...
  7. python如何创建excel文件_Python xlrd/xlwt 创建excel文件及常用操作
  8. linux下python版本升级,linux下升级python版本
  9. 每日一笑 | 我写了一段代码,为什么不能运行呢?
  10. 什么样的程序员会让人讨厌