gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:30:54 25 4
gpt4 key购买 nike

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

对我来说,很明显异步记录器在最佳性能方面是明显的赢家,这是完全有道理的。我不明白随机访问文件附加器与缓冲文件附加器的权衡。我查看了log4j网站here但我没有看到使用随机访问文件附加器有任何真正的缺点。

有人可以解释一下这些差异,并解释一下何时应该使用它们吗?

最佳答案

兴趣点:

  • RandomAccessFileAppender 始终处于缓冲状态。从 beta-9 开始,缓冲区大小为 256 * 1024 字节且不可配置。这将在下一个版本中变得可配置。
  • FileAppender 可以使用 bufferedIO 属性进行配置以进行缓冲或不缓冲。从 beta-9 开始,缓冲区大小为 8 * 1024 字节且不可配置。这将在下一个版本中变得可配置。

  • 在底层,FileAppender 使用 java.io.FileOutputStream,它可以包装在 BufferedOutputStream 中。 RandomAccessFileAppenders 写入 ByteBuffer,当缓冲区已满或调用 flush() 时,该 ByteBuffer 会附加到 RandomAccessFile 的末尾。应该没有太大差异(除了性能之外),但 FileAppender 具有更长的跟踪记录,并且较新的 RandomAccessFileAppender 可能仍然存在尚未发现的问题。滚动似乎对于两种类型的附加程序都工作得很好,但可能存在团队尚不了解的极端情况。 (Log4J2 正在积极开发中,任何问题都会得到迅速解决。)

  • RandomAccessFileAppender 和 FileAppender 都可以使用 immediateFlush 属性进行配置,以将每个日志事件刷新到磁盘。我建议您在使用 AsyncAppenders 或 AsyncLoggers 时关闭 immediateFlush ,这样您就可以利用它们提供的良好批处理行为:异步附加程序和记录器可以在记录多个事件后刷新,并且在队列结束时也肯定会刷新一次再次清空,效率很高,同时保证所有日志事件始终持久化到磁盘。

关于java - 何时在 log4j 配置中使用随机访问文件追加器与缓冲文件追加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com