java - log4j 1.2 - 异步记录器内存使用限制设置

标签 java memory-management log4j

我想知道是否有办法限制异步记录器将使用的内存量。在将日志元素写入磁盘之前,有一个缓冲区大小限制了日志元素的数量,如下所示:

  <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 中,缓冲区只是一个 ArrayListsources非常简单。唯一可用的选项是 blocking ,它提供了当缓冲区已满时阻塞线程的选择。这将限制内存消耗,但也可能卡住应用程序,因为附加程序此时变为同步。

Log4j2 中的缓冲区实现已更改为Queue,以及 policy可用于设置缓冲区已满时的追加器行为。

关于java - log4j 1.2 - 异步记录器内存使用限制设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48692487/

相关文章:

java - 正则表达式,从 HTML 中提取具有特殊名称的 href 属性

C++ 使用 vector 加载 500MB 数据使用 5GB RAM

memory-management - Swift 5 - 模拟器启动时显示白屏 - 仪器

python - 为什么两个相同的列表有不同的内存占用?

java - 减少 catalina.out 中 log4j 的日志

log4j - 我在哪里可以找到 log4j 服务器?

java - 列表或字符串数​​组作为方法参数

java stringbuilder添加额外字符新手问题

deployment - 不同环境下的应用日志Log4j

Java:找出函数是用可变参数还是数组调用的