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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j 1.2 - 异步记录器内存使用限制设置相关的知识,希望对你有一定的参考价值。

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

  <appender name="async" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="1024"/>
    <appender-ref ref="ROLL"/>
  </appender>

但是,在决定阻止和写出其队列之前,似乎没有任何方法可以限制log4j将使用的内存量。默认缓冲区大小为128 LoggingEvents,但理论上每个LoggingEvent可以占用1 GB,这可以快速占用所有perm gen空间。

整个队列的全局设置是最好的。我们宁愿不限制您可用于单个日志调用的内存量,但这可能是一个不错的最后手段。

非常感谢,迈克

答案

不,在Log4j 1.2中,缓冲区只是一个ArrayListsources非常简单。唯一可用的选项是blocking,它提供了在缓冲区已满时阻塞线程的选项。这将限制内存消耗,但也可能冻结应用程序,因为此时appender变为同步。

缓冲区实现在Log4j2中更改为Queue,并且policy可用于在缓冲区已满时设置appender行为。

以上是关于log4j 1.2 - 异步记录器内存使用限制设置的主要内容,如果未能解决你的问题,请参考以下文章

Java 日志记录与 Log4J [关闭]

在 log4j 1.2 到 log4j 2 的迁移中,如何处理 DailyRollingFileAppender 类?

Apache log4j 1.2 - Short introduction to log4j

log4j2 异步日志 -- AsyncAppender

在Spring项目中使用Log4j记录日志

在Spring项目中使用Log4j记录日志