我想知道是否有办法限制异步记录器将使用的内存量。在将日志元素写入磁盘之前,有一个缓冲区大小限制了日志元素的数量,如下所示:
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1024"/>
<appender-ref ref="ROLL"/>
</appender>
但是,在决定阻止并写出其队列之前,似乎没有任何方法可以限制 log4j 将使用的内存量。默认缓冲区大小为 128 个 LoggingEvent,但理论上每个 LoggingEvent 可能会占用 1 GB,这可能会很快占用所有永久代空间。
最好对整个队列进行全局设置。我们宁愿不限制可用于单个日志调用的内存量,但这可能是最后的选择。
非常感谢, 迈克
最佳答案
不,在 Log4j 1.2 中,缓冲区只是一个 ArrayList
。 sources非常简单。唯一可用的选项是 blocking ,它提供了当缓冲区已满时阻塞线程的选择。这将限制内存消耗,但也可能卡住应用程序,因为附加程序此时变为同步。
Log4j2 中的缓冲区实现已更改为Queue
,以及 policy可用于设置缓冲区已满时的追加器行为。
关于java - log4j 1.2 - 异步记录器内存使用限制设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48692487/