log4j滚动文件appender - 多线程问题?

时间:2010-02-26 06:38:06

标签: java logging log4j

Log4J滚动文件追加器是否存在任何已知错误。多年来我一直在愉快地使用log4j,但却没有意识到这一点。我的一位同事建议存在已知问题(我发现其中有一个Bugzilla条目),在重负载下,滚动文件appender(我们使用基于时间的条目)可能无法在翻转发生时正确执行@午夜

Bugzilla条目 - https://issues.apache.org/bugzilla/show_bug.cgi?id=44932

欣赏其他人如何克服这一点的输入和指示。

谢谢, Manglu

2 个答案:

答案 0 :(得分:2)

我自己没有遇到过这个问题,从错误报告中我会怀疑这是非常罕见的。 Log4j RollingFileAppender一直以可预测和可靠的方式为我开发和维护的应用程序工作。

这个特殊的错误,如果我理解正确的话,只有在有多个Log4j实例时才会发生,就好像你有同一个应用程序的多个实例同时运行一样,写入同一个日志文件。然后,当它是翻转时间时,一个实例无法锁定文件以删除它并存档其内容,从而导致丢失要存档的数据。

除非您想特别引用它们,否则我无法与您的同事提到的任何其他已知错误进行对话。总的来说,我相信Log4j对于生产应用来说是可靠的。

答案 1 :(得分:0)

@kg,这也发生在我身上。这种确切的情况。同一程序的2个实例。 我将它更新为更新的rolling.RollingFileAppender,而不是使用DailyFileRoller(无论它被调用)。

我通过crontab同时运行两个实例。实例输出尽可能多的消息,直到达到5秒。它们使用System.currentTimeMillis测量1秒的时间,并附加到计数器以估计循环的5秒时间段。因此,此测试的开销最小。每个输出日志消息都包含一个递增的数字,该消息包含从命令行设置的标识符,以便能够将它们分开。

通过将日志消息顺序放在一起,其中一个进程从序列的开始到结束成功写入,另一个进程丢失其输出的第一个条目(从0开始)。

这真的应该修复......

相关问题