有没有办法使用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。
答案 0 :(得分:0)
截至最新测试版(beta-9,将在几天内发布),用户无法控制FileAppender或RandomAccessFileAppender的缓冲区大小。 (FastFileAppender已在beta-9中重命名为RandomAccessFileAppender。)
仅供参考,FileAppender的缓冲区大小为8192字节,对于RandomAccessFileAppender,缓冲区大小为262,144字节。
如果您需要控制缓冲区大小,请在log4j2问题跟踪器或用户邮件列表上提出功能请求。
更新:LOG4J2-401在RC1中已修复。从RC2开始,缓冲区大小也可以为RollingRandomAccessFileAppender和RollingFileAppender配置。