有些需要分析运行过程的软件,通常都会记录过程日志。因此,需要一个日志组件负责记录、存储日志数据。网络上开源的日志组件很多,各具特色,用的比较多的是Log4cplus组件。网络上大多数的日志组件,都与存储日志的模块同属于一个进程。该方式优点很多,不足也是明显的。不足的地方是,难以实现多进程同时写一个日志文件。另外,开源日志组件在日志备份功能上可选择的方式略显不足。
有的公司软件通常由多个进程组成,要求日志支持多进程可同时存储一个文件。对于那种需要7*24小时稳定可靠运行的应用而言,日志组件的稳定可靠性提出非常高的要求。不能存在内存、句柄等资源无法释放的情况,系统资源占用率必须维持一个较低水平,不能出现突发资源占用过高现象等等。
通常,我们要求的日志组件的存储功能需要具备如下特点:
1、支持多线程同时写同一个文件。
2、支持多进程同时写同一个文件。
3、具有灵活的存储格式自定义功能。
4、可存储二进制数据,存储时候自动转换成十六进制格式。
5、随日志数据存储的时间格式支持自定义。
6、日志接口支持多语言。比如,常用的VC++、C#等。
7、意外情况发生,尽可能少丢失日志。比如遇到突然断电等情况。
对于存储的文件名称定义上,需要支持:
1、支持任意定义文件名称和路径。
2、支持按一定周期创建文件。用得较多的是按天创建文件,也就是每天创建一个日志文件。
3、支持文件名称中包含日志开始存储的时间和最后存储的时间,精确到毫秒。
4、支持按文件大小备份功能。比如当文件大于5兆时候,日志模块应该另起一个文件继续存储。使日志文件维持一个预定的大小,不至于太大,无法浏览。
对于备份文件的维护上,需要:
1、具有日志文件压缩功能。
2、提供按天删除过期日志功能。比如,要求日志模块志保留最近60天的日志,超出60天的日志文件会自动删除。有些软件会长时间自动运行,多余日志文件自动删除功能非常有必要。
3、支持磁盘可用空间大小低于设定值时候,删除最早的日志文件。
4、可设置所有的日志文件大小低于某个限制值。比如,设置日志文件可使用1GB的磁盘空间,凡是存储的日志记录高于1GB,自动删除最早日志,以便维持日志总大小始终低于1GB。
日志模块的性能上,必须具有:
1、7*24小时压力测试,无系统资源无法释放情况出现。
2、万一日志模块遇到故障退出,具有自动重新启动,客户端继续存储日志数据而不丢失。
3、占用系统资源小,无突发资源占用率高的情况出现。
4、存储效率必须尽可能高。
其它方面,要求有日志浏览器,提供高效的浏览、查找、过滤、导出等功能。具有实时监控功能,当前正在存储的日志可立即显示于浏览器中,该功能主要在测试时候实时查看输出日志记录。
上边列出的关于日志模块的几大点,就是我们公司对日志模块的基本要求。通常开源日志组件难以符合上述要求。