当前位置: 首页 > 知识库问答 >
问题:

使用log4j2实现缓冲IO的方法

雍宇定
2023-03-14

是否有任何方法可以使用log4j2实现文件追加器,它将在内存中存储特定大小的日志,然后将日志写入文件(本地/远程)

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

在log4j2文档中:

FastFileAppender与标准的FileAppender类似,只是它总是被缓冲(不能关闭),并且在内部使用ByteBuffer RandomAccessFile而不是BufferedOutputStream。与使用“bufferedIO=true

bufferedIO:(布尔值)的FileAppender相比,我们看到了20-200%的性能改进。如果为true,则默认情况下,当缓冲区满时,记录将写入缓冲区,当记录写入时,数据将写入磁盘。文件锁定不能与bufferedIO一起使用。性能测试表明,即使启用了immediateFlush,使用缓冲I/O也可以显著提高性能

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

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

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

共有1个答案

彭星津
2023-03-14

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

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

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

更新:RC1中已修复LOG4J2-401。自RC2以来,还可以为RollingAndomAccessFileAppender和RollingFileAppender配置缓冲区大小。

 类似资料:
  • 本文向大家介绍详解java IO流之缓冲流的使用,包括了详解java IO流之缓冲流的使用的使用技巧和注意事项,需要的朋友参考一下 java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记

  • 本文向大家介绍js实现缓冲运动效果的方法,包括了js实现缓冲运动效果的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js实现缓冲运动效果的方法。分享给大家供大家参考。具体分析如下: 该实例可实现一开始速度很快,然后慢下来,直到停止的效果。 要点: 目标点减去元素的当前位置的值除以8,因为offsetleft的值是一直在变大,所以速度的值也是一直的变小 正向速度的时候向上取整,反向速度

  • 本文向大家介绍SpringBoot使用Redis缓存的实现方法,包括了SpringBoot使用Redis缓存的实现方法的使用技巧和注意事项,需要的朋友参考一下 (1)pom.xml引入jar包,如下:   (2)修改项目启动类,增加注解@EnableCaching,开启缓存功能,如下:   (3)application.properties中配置Redis连接信息,如下:   (4)新建Redis

  • 我使用python boto与s3交互。我在s3上的文件是CSV的,我想从s3中读取行,使用缓冲区来绑定内存使用。 我想知道是否有人有任何方法可以编写python的io类来实现这一点?我们的目标是有某种抽象,能够包装boto键,并在键上提供一个或迭代器接口(只提供调用)。其复杂性在于,由于它存储为CSV,所以每一行的长度都是可变的。 目标是有一个抽象,我能够包装python boto key,然后

  • 本文向大家介绍JavaScript缓冲运动实现方法(2则示例),包括了JavaScript缓冲运动实现方法(2则示例)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript缓冲运动实现方法。分享给大家供大家参考,具体如下: 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) 需要注意:当计算出来的速度有小数时需要取整; 例子1:

  • 我有一个简单的客户端和服务器设置。客户端希望在服务器中使用ZeroMQ执行通信方法。我将使用REQ和REP套接字,因为它们适合这个用例。然而,我对protobuf的定义有疑问。我认为这两个选项可用于实现目标: 其中“control”包含要远程执行的方法的名称。另一种选择可以是: 最好的方法是什么?或者至少使用一种方法而不是另一种方法的权衡是什么?