🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 简介 #### 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便、规范、高效地写日志,以及快速地读取和查询日志。 #### 为什么使用SeasLog log日志,通常是系统或软件、应用的运行记录。通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。 php内置error_log、syslog函数功能强大且性能极好,但由于各种缺陷(error_log无错误级别、无固定格式,syslog不分模块、与系统日志混合),灵活度降低了很多,不能满足应用需求。 好消息是,有不少第三方的log类库弥补了上述缺陷,如log4php、plog、Analog等(当然也有很多应用在项目中自己开发的log类)。其中以log4php最为著名,设计精良、格式完美、文档完善、功能强大。推荐。 不过log4php在性能方面表现非常差,下图是SeasLog与log4php的ab并发性能测试( 测试环境:Ubuntu12.04单机,CPU I3,内存 16G,硬盘 SATA 7200): SeasLogVSlog4php ![](https://box.kancloud.cn/86c4f102af29132eb568ca6e08cff206_791x372.png) 那么有没有一种log类库满足以下需求呢: * 分模块、分级别 * 配置简单(最好是勿须配置) * 日志格式清晰易读 * 应用简单、性能很棒 SeasLog 正是应此需求而生。 目前提供了什么 1. 在PHP项目中便捷、规范地记录log 2. 可配置的默认log目录与模块 3. 指定log目录与获取当前配置 4. 初步的分析预警框架 5. 高效的日志缓冲、便捷的缓冲debug 6. 遵循 PSR-3 日志接口规范 7. 自动记录错误信息 8. 自动记录异常信息 9. 连接TCP端口,以RFC5424格式发送日志 10. 连接UDP端口,以RFC5424格式发送日志 11. 支持RequestId区分请求 12. 支持日志模板自定义 目标是怎样的 * 便捷、规范的log记录 * 高效的海量log分析 * 可配置、多途径的log预警 #### 性能要求 既然是日志,免不了会写文件,或者通过pipe通过网络传送到某个存储中心(我们暂不考虑存储中心的设计)。可以想见,假设一个请求中需要写出1000处log,那么势必会有1000次IO,这对性能将是一个很大的拖延点。一般对于处理这种多次相同的请求场景,我们要解决的其实也很简单,使用cache或buffer,把多次请求作归并,从而降低对磁盘或网络的IO,这是一个基本的思想。 SeasLog也是这么做的。设定一个buffer_size(默认100条log),使用PHP请求内存,每写一次log,塞入内存,同时buffer_size加;当buffer_size等于设置值时,则进行一次IO,同时清除buffer; 当然,如果请求结束了、或执行了die、exit或其他异常退出时,不管buffer_size有没有攒够设置值,立刻进行一次IO,同时清除buffer。 到目前为止,SeasLog的正式版本,采用Apache 2.0开源协议,同时可以在php.net官方,和Github库上获得它的完整代码。 [Php.net](http://pecl.php.net/package/seaslog) [Github](https://github.com/Neeke/SeasLog)