用php编写一个日志系统,php利用单例模式实现日志处理类库
对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录。
/**
* 日志处理类
*
* @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利用单例模式实现日志处理类库相关推荐
- c语言中如何设计和编写一个应用系统?
C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如" ...
- 编写一个“绘画系统”
在最后一次的作业中,老师让我们编写一个"绘画系统",提供一系列绘画材料(例如画笔/颜料/滤镜)给用户操作,以创作出动态/交互的绘画作品.这个绘画系统是对"绘画" ...
- ppt编写一个抽奖系统
本文是用ppt制作一个抽奖系统,点击开始抽取时,屏幕会随机滚动数字,点击停止滚动即显示抽取到的数字. 实现效果,请下载我的作品进行查看:http://download.csdn.net/detail/ ...
- docker(10、日志管理4)5、Graylog 日志系统(1、部署Graylog日志系统,2、Graylog管理日志)
部署Graylog日志系统 Graylog 是与 ELK 可以相提并论的一款几种式日志管理方案,支持数据收集.检索.可视化Dashboard. 将实践用Graylog来管理Docker日志 Grayl ...
- 计算机毕业设计中用Java编写一个订餐系统(JAVA SWING)
一. 开发技术 JDK:JDK1.8,JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+J ...
- ppt编写一个抽奖系统_自己动手用PPT做个抽奖器
龙源期刊网 http://www.qikan.com.cn 自己动手用 PPT 做个抽奖器 作者:俞木发 来源:<电脑爱好者> 2017 年第 21 期 喜欢看电视的朋友可能都知道,某电视 ...
- ppt编写一个抽奖系统_PPT小技巧-制作简易抽奖幻灯片
哈喽,小编最近工作繁忙,一不小心停更了半个多月,不知大家是否想念小编,系统确实是想念了小编哒~归正传,直奔今天的主题,小编来教大家一个简单的制作抽奖的方法,以后有个小活动或者年会的时候就可以小露一手了 ...
- Android编写一个登录界面,利用数据库实现记住密码,注册账号,强制下线,以及类似QQ的下拉列表登录功能
首先呢,看到这么长的标题,是不是感觉这些功能有点难以实现呢,哈哈,其实并没有想象中的那么复杂,下面就跟着笔者来一起学习一下这些功能是怎么实现的吧! 1.建立一个所有活动的父类,继承自Appcompat ...
- python用一行代码编写一个回声程序_利用Python实现一个WC程序
项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数 ...
最新文章
- 【原创】大叔经验分享(65)spark读取不到hive表
- Wiki为什么会流行
- python include_tag_详解Python的Django框架中inclusion_tag的使用
- 了不起的Virtual DOM(一):起源
- Cissp-【第3章 安全工程】-2021-1-31(205页-237页)
- oracle忘记密码
- Linux——线程(总结)
- 工业用微型计算机(26)-伪操作(2)
- 均匀白噪声的定义及特点_噪声的物理本质是什么?
- java dfa_java 实现DFA 算法(理论百度搜索)
- tensorboard运行
- bash shell 中时间操作常用方法总结
- 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?
- JavaScript语言精粹(修订版)
- 经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
- 4米乘以12米CAD图_【超干货】CAD铺装排版下料之路径阵列
- word如何去掉标题前面的黑点
- 假定1km长的CSMA/CD网络的数据率为1Gbit/s。设信号在网络上的传输速率为200000km/s.求能够使用此协议的最短帧长。
- asp.net web压力测试
- 第二章华氏度摄氏度转换
热门文章
- php5.3教程,Php 5.3发布
- Android 发起加入QQ群、打开网址、启动拨打电话界面
- Makefile的学习
- linux之tar命令使用总结
- Tree的前序序列化
- 查询工资最低的3名员工的职工工号、姓名和收入_普法课堂|你有多久没有收到工资条了?...
- python如何创建excel文件_Python xlrd/xlwt 创建excel文件及常用操作
- linux下python版本升级,linux下升级python版本
- 每日一笑 | 我写了一段代码,为什么不能运行呢?
- 什么样的程序员会让人讨厌