使用 log4j2 实现缓冲 IO 的方法



有没有办法使用 log4j2 实现文件追加器,它将日志存储在特定大小内存中,然后将日志写入文件(本地/远程)。

有什么办法可以做到这一点吗?

在 log4j2 文档中:

FastFileAppender类似于标准FileAppender,只是它始终处于缓冲状态(无法关闭),并且在内部使用ByteBuffer + RandomAccessFile而不是BufferedOutputStream。与带有"bufferedIO=true

"的FileAppender相比,我们看到性能提高了20-200%bufferedIO:(布尔值)如果为 true - 默认值,则记录将写入缓冲区,数据将在缓冲区已满时写入磁盘,或者,如果设置了 iminstantteFlush,则在写入记录时写入磁盘。文件锁定不能与缓冲 IO 一起使用。性能测试表明,即使启用了即时刷新,使用缓冲 I/O 也能显著提高性能。

即时刷新:(布尔值)设置为 true - 默认值时,每次写入后将进行刷新。这将保证数据写入磁盘,但可能会影响性能。每次写入后刷新仅在将此追加器与同步记录器一起使用时才有用。异步记录器和追加程序将在一批事件结束时自动刷新,即使 immediateFlush 设置为 false。这也保证了数据写入磁盘,但效率更高。

通过使用上述属性,我们可以控制将数据写入文件,但是我没有找到将日志存储在内存中然后在达到特定缓冲区大小后记录它的方法。

更新:在 LOG4J2-jira-project 中添加了新功能请求:LOG4J2-401。

从最新的测试版(beta-9,将在几天内发布)开始,用户无法控制FileAppender或RandomAccessFileAppender的缓冲区大小。(FastFileAppender 在 beta-9 中已重命名为 RandomAccessFileAppender。

仅供参考,FileAppender 的缓冲区大小为 8192 字节,对于 RandomAccessFileAppender,缓冲区大小为 262,144 字节。

如果您需要控制缓冲区大小,请在 log4j2 问题跟踪器或用户邮件列表中提出功能请求。


更新:LOG4J2-401 已在 RC1 中修复。从RC2开始,缓冲区大小也可以配置为RollingRandomAccessFileAppender和RollingFileAppender。

最新更新