【发布时间】:2015-01-08 09:34:01
【问题描述】:
在我们当前的实现中,其中一个服务器为 RollingRandomAccessFile 和另一个 RollingFile 设置了 log4j2 的配置。如果可能的话,我想知道两者之间的区别以及各自的优缺点。
谢谢
【问题讨论】:
标签: log4j2
在我们当前的实现中,其中一个服务器为 RollingRandomAccessFile 和另一个 RollingFile 设置了 log4j2 的配置。如果可能的话,我想知道两者之间的区别以及各自的优缺点。
谢谢
【问题讨论】:
标签: log4j2
主要区别在于性能: http://logging.apache.org/log4j/2.x/manual/async.html#FileAppender_vs._RandomAccessFileAppender
RandomAccessFileAppender 总是被缓冲,而 FileAppender 提供了一个配置开关(bufferedIO)。两者都有一个“immediateFlush”配置选项,以防你想确保你的消息在磁盘上(例如审计日志)。最后,RandomAccessFileAppender 的默认缓冲区大小更大:256*1024 字节 vs FileAppender 8*1024 字节(两个 appenders 缓冲区大小都可以在配置中设置)。
还有一点,底层实现在一种情况下使用 RandomAccessFile,在另一种情况下使用 OutputStream(顾名思义)。将 RandomAccessFileAppender 与 unix logrotate 实用程序 (https://issues.apache.org/jira/browse/LOG4J2-354) 结合使用存在一个已知问题,Log4j 团队建议您使用 RollingRandomAccessFile 进行翻转并避免使用 unix logrotate 实用程序。显然 FileAppender 可以与 logrotate 结合使用——我们还没有听说过任何问题。 (由于问题已经提到了两个附加程序的 Rolling... 变体,你已经在做正确的事情,我只是想我应该提一下。)
【讨论】: