繁体   English   中英

何时在log4j配置中使用随机访问文件附加器与缓冲文件附加器

[英]When to use Random Access File Appenders vs. Buffered File Appenders in log4j configuration

我一直在寻找优化我的Log4J配置来提高吞吐量和减少延迟,我正在尝试确定最佳设置。 我正在处理一个系统,其中代码必须是无错误的,可靠的,并且系统性能是最重要的,从最重要到最不重要。

我觉得非常清楚异步记录器在最佳性能方面是明显的赢家,这是完全合理的。 我不理解随机访问文件附加器与缓冲文件附加器的权衡。 我在这里查看了log4j网站但我没有看到使用随机访问文件附加程序的任何真正的缺点。

有人可以解释这些差异,并解释每个应该使用的时间吗?

兴趣点:

  • RandomAccessFileAppenders总是被缓冲。 从beta-9开始,缓冲区大小为256 * 1024字节,不可配置。 这将在下一版本中配置。
  • 可以使用bufferedIO属性配置FileAppenders以进行缓冲。 从beta-9开始,缓冲区大小为8 * 1024字节,不可配置。 这将在下一版本中配置。

  • 在引擎盖下,FileAppenders使用java.io.FileOutputStream,它可以包装在BufferedOutputStream中。 RandomAccessFileAppenders写入ByteBuffer,当缓冲区已满或调用flush()时,ByteBuffer附加到RandomAccessFile的末尾。 应该没有太大差异(除了性能)但FileAppenders有更长的跟踪记录,并且可能仍然存在尚未发现的较新的RandomAccessFileAppender的问题。 翻转似乎适用于两种类型的appender,但可能存在团队尚未了解的极端情况。 (Log4J2正在积极开发中,任何问题都将得到迅速解决。)

  • 可以使用immediateFlush属性配置RandomAccessFileAppender和FileAppender,以将每个日志事件刷新到磁盘。 我建议您在使用AsyncAppenders或AsyncLoggers时关闭immediateFlush ,这样您就可以利用它们提供的良好批处理行为:异步appender和logger在记录多个事件后可以刷新,并且当队列再次为空时也肯定会刷新一次,这非常有效并同时确保所有日志事件始终保持为磁盘。

随机访问直接写入文件而不进行缓冲。 这比缓冲写入更慢但更可靠,因为缓冲写入可能会在发生崩溃时丢失一些未刷新的写入。 您需要决定哪个对您更重要。 从你的三个清单中不清楚。

编辑人们会期望一个名为RandomAccessAppender的类会使用随机访问,这意味着没有缓冲,但显然它没有!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM