现在的位置: 首页 > 综合 > 正文

服务器日志

2013年08月11日 ⁄ 综合 ⁄ 共 966字 ⁄ 字号 评论关闭
日志功能在服务器中是十分重要的,对于一个在后台7*24运行的程序来说,日志是反映其运行情况的有效手段。

 
    对于日志的管理方式我觉得可以按级别和功能进行分类。日志可以记录在本地或远程,远程日志功能便于集中管理,但是必然在效率上有所损失。本人认为服务器的日志功能应该进可能的快,不能因为日志的引入影响服务器的性能。所以更推崇本地日志的功能。对于严重的出错信息,可以采取远程方式,以通知维护人员及时处理。
 
    对于本地日志,由于服务器的存储不可能无限大,对于日志应该妥善管理,不能因为大量的日志占用太多的存储空间。同时在程序中尽量多的输出异常的信息,以反映服务器的问题,为改进提供必要的信息。对于日志的收集,建议采用脱机的方式,可以减少服务器的复杂性。对于过期的日志要即使删除。
 
我对日志功能实现的考虑:
 
1、可以开辟一块内存区域存放日志的信息,我采用静态变量,这样在影像文件中比较好定位,分析coredump信息的时候可以直接定位到日志的内存区域。对于动态开辟日志空间,我觉得开销交大,而且在分析coredump文件的时候也比较复杂。我不这样用。
 
2、对于日志应该及时输出到文件中,以便于观察,避免日志信息的丢失。err 流是不提供缓冲功能的,的确是实现日志功能的好的工具,不过我觉得日志信息实际上没有必要马上输出到文件中,我采用的是定时输出的方式,这样可以充分利用缓冲空间提高日志功能的性能,减少写盘操作。
 
3、对于日志丢失的问题,前面已经提到,可以到coredump文件中查看内存信息,了解服务器在崩溃前的运行情况。对于服务器死锁可以采用userdump工具,取coredump文件进行分析。在以上情况,以上策略可以满足本人的应用。
 
4、对于日志信息的缓冲输出,可以考虑使用双缓冲的技术。在输出日志缓冲区前,先进行日志缓冲空间的切换。这样使在此期间的日志输出,不会因为写盘操作而阻塞。
 
5、对于服务器多是多线程的,对此可以对每个线程分配一个日志输出的单元,这样可以减少由于单个日志单元的原因,由线程同步带来的开销。但这样不利于分析日志。我觉得基本上单个日志单元基本上可以满足大部分的应用需要。
 
6、对于日志的实现可以考虑编译器提供的宏的使用,__FILE__、__LINE___、__FUNCTION__等,简化日志功能的使用。

抱歉!评论已关闭.