log4cpp的RollingFileAppender异常情况下日志文件不拆分的一种可能解决方法
来源:互联网 发布:科比乔丹数据对比国外 编辑:程序博客网 时间:2024/04/29 15:55
在使用log4cpp几年下来,也是接二连三地发现log4cpp实现上的隐患。
注:log4cpp的源码撰写的还是非常漂亮的,从中也学到不少知识。
最开始是发现log4cpp不同的Category向同一个日志文件输出,就会出现些莫名其妙的问题,遂写了log4cpp多线程缺角的文章。当时还因此问题给log4cpp开发者反馈bug,而log4cpp开发者认为不应该这样使用,他们认为每个Category用于独立的日志输出位置。
所以,当时就自己动手修改源码进行编译了。不过,在即使动了那个地方的隐患后,还是偶发地会出现日志文件无法完成切分的问题。
这次还是因为无法切分的故障,再次用放大镜的视角去观察RollingFileAppender的源码,配合使用win7任务管理器性能Tab页下资源监视器以发现文件占用情况,发现log4cpp RollingFileAppender使用POSIX rename文件接口函数实现文件切换。但是其在实现上没有考虑rename失败的情况,所以,在一些特殊情况下,则会造成日志只向一个文件输出,从而造成此文件过大,甚至占满磁盘。
这个异常情况,比较常见的情况就是在当rename时,日志文件被其他地方也open了。例如,有人在查看分析日志,但是因为某种原因忘记关闭了。在这种异常情况下,log4cpp就没有办法自身完成rename,所以,也就无法切分了。
因为日志文件被其他地方open是无法自身解决的问题,所以,只能两害相较取其轻,再次选择了修改log4cpp源码,判断在出现这种异常情况的时间,就对日志文件采取截取打开文件方式而不是追加的文件方式。
寄希望这次能够很好地解决这个问题,我还是很信赖log4cpp的:)注:log4cpp的源码撰写的还是非常漂亮的,从中也学到不少知识。
阅读全文
0 0
- log4cpp的RollingFileAppender异常情况下日志文件不拆分的一种可能解决方法
- 报找不到so文件时有可能的一种情况
- Linux计划任务不执行的一种可能解决方法
- Session值不规律变化的一种可能解决方法
- Log4j2中RollingFile的文件滚动更新机制 一、什么是RollingFile RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的
- InvocationTargetException异常的一种情况
- Trace/BPT trap: 一种可能的解决方法
- 使用log4j扩展包的RollingFileAppender生成带时间戳的日志文件
- log4cpp-【写日志】:使用log4cpp的基本步骤
- 产生异常ORA-12516的一种情况
- log4cpp 内存泄漏的一个出现情况
- aspx页面调用COM组件引发异常的一种情况及解决方法
- java foreach不适用的一种情况
- iis不提示错误信息的一种情况
- gcc: Internal error: Killed (program cc1) 一种可能的情况
- win8环境下sqlserver配置本机数据源报错53,17的一种可能解决方法
- log4cpp 快速实现你的日志系统
- log4cpp 快速实现你的日志系统
- ITK图像配准介绍
- js给iframe动态设置src和参数参数传递问题
- HDU3832 Earth Hour 斯坦纳树(三点连通)
- Week One
- Autodesk AutoCAD LT 2018中文免费版下载 64位/32位
- log4cpp的RollingFileAppender异常情况下日志文件不拆分的一种可能解决方法
- Swift使用addChildViewController添加UITableViewController后被遮挡问题
- list 和tuple的使用
- SVM理论基础
- EOJ 3290 找数(III) (模拟+简单数字串)
- stop appium server
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 J. Our Journey of Dalian Ends [网络流]
- 2017 ACM-ICPC 亚洲区乌鲁木齐赛网络赛 E. Half-consecutive Numbers
- Java中byte类型转型为int类型为什么要作&0xff