使用SeasLog打造PHP项目中的高性能日志组件(一)

什么是

是一个语言编写的扩展,提供一组规范标准的功能函数,在项目中方便,规范,高效地写日志,以及快速地读取和查询日志。

为什么使用

无论在什么应用中,日志日志都是架构中不可缺少的一个重要组成部分,它通常是系统或软件,应用的运行记录。通过日志的分析,可以方便用户了解系统或软件,应用的运行情况,如果你的应用日志足够丰富,也可以分析以往用户的操作行为,类型喜好,地域分布或其他更多信息,如果一个应用的日志同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位,解决问题,补救损失。

我们知道,php内置了很多日志函数,如error_log, syslog, file_put_content,这些函数功能强大且性能极好,但由于各种缺陷(error_log, file_put_content无错误级别,无固定格式像是信马由缰随处乱画;syslog不区分模块,而且与系统日志混合,读syslog记录会让人抓狂的)、灵活度降低了很多,很不能满足应用需求。基本上所有的开发者,都会自行设计封装日志库,当然也会有很多开发者选择已有的开源日志库。

也有很多开源日志类库弥补了上述缺陷,如log4php,帕洛格,模拟等(当然也有很多应用在项目中自己开发的日志类)。其中以log4php最为著名,它的设计精良,格式完美,文档完善,功能强大。但是经过测试,log4php的性能非常差。

这是log4php与SeasLog的性能对比图:

使用SeasLog打造php项目中的高性能日志组件(一)

设计思路

那么有没有一种日志类库同时满足以下需求呢:

·分模块,分级别

·配置简单(最好是勿须配置)

·日志格式清晰易读

·应用简单、性能很棒

我们知道,标准是一个国际化的日志标准,它要求了模块,级别,清晰,易用等日志工作应具备的特点,因此,只要我们遵循了标准,则我们可以完成分模块,分级别以及日志格式清晰易读的要求。

配置简单这个需求也很好完成。如果严格按照既定规则,其实只需要设置默认目录就可以了。

,现在我们只剩下性能这一个要求。

既然是日志,免不了会写文件,或者通过通过网络传送到某个存储中心(我们暂不考虑存储中心的设计)。可以想见,假设一个请求中需要写出处,那么势必会有次,这对性能将是一个很大的拖延点。一般对于处理这种多次相同的请求场景,我们要解决的其实也很简单,使用,或把多次请求作归并,从而降低对磁盘或网络的,这是一个基本的思想。

也是这么做的。设定一个(默认条),使用请求内存,每写一次,塞入内存,同时加;当等于设置值时,则进行一次,同时清除;当然,如果请求结束了,或执行了,或其他异常退出时,不管有没有攒够设置值,立刻进行一次,同时清除。

到目前为止,的正式版本为,采用开源协议,同时可以在官方,和库上获得它的完整代码。

目前提供了什么

·在PHP项目中便捷,规范地记录日志

·可配置的默认日志目录与模块

·指定日志目录与获取当前配置

·初步的分析预警框架

·高效的日志缓冲,便捷的缓冲调试

·遵循PSR-3日志接口规范

怎么安装

获得源码后,可自行编译。

/道路/美元/phpize

$ ./configure——with-php-config=/道路//php-config

让美元,,使安装

当然,使用管理工具会更方便:

seaslog。ini的配置

;配置php SeasLog模块

=SeasLog延伸。所以

seaslog.default_basepath=/日志/seaslog-test ,,,默认日志根目录

seaslog.default_logger=default ,,,,,,,,,,,,,,,默认记录器目录

seaslog。disting_type=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,是否以类型分文件1是0否(默认)

seaslog。disting_by_hour=1,,,,,,,,,,,,,,,,,,,,,,是否每小时划分一个文件1是0否(默认)

seaslog。use_buffer=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,是否启用缓冲区1是0否(默认)

seaslog。buffer_size=100,,,,,,,,,,,,,,,,,,,,,,,,;缓冲区中缓冲数量默认0(不使用buffer_size)

seaslog。水平=0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,记录日志级别默认0(所有日志)

,开启以类型分文件,即日志文件区分信息\警告\埃罗

,开启每小时划分一个文件

,开启缓冲区。默认关闭。当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。

,设置缓冲数量为100。默认为0,即无缓冲数量限制。当buffer_size大于0时,缓冲量达到该值则写一次文件。

使用SeasLog打造PHP项目中的高性能日志组件(一)