使用log4j2实现缓冲IO的方法

时间:2013-09-13 11:50:24

标签: java logging log4j2 buffered

有没有办法使用log4j2来实现文件追加器,它会将登录内存存储到特定的大小,之后会写入日志到文件(本地/远程)。

有没有办法实现这个目标?

在log4j2文档中:

FastFileAppender类似于标准FileAppender,但它始终是缓冲的(无法关闭),内部使用ByteBuffer + RandomAccessFile代替BufferedOutputStream。与带有“bufferedIO=true”的FileAppender相比,我们看到 20-200%的性能提升 bufferedIO:(布尔值)当为true时 - 默认情况下,记录将写入缓冲区,当缓冲区已满时,数据将写入磁盘;如果设置了immediateFlush,则写入记录时。文件锁定不能与bufferedIO一起使用。性能测试表明,即使启用了immediateFlush,使用缓冲I / O也可以显着提高性能。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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


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