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

Log4j2无GC异步记录器:传递可变对象

乌翰学
2023-03-14

我使用的是log4j版本2.10.0

我正在尝试使用混合的异步和同步记录器设置无gc日志记录(因此它是通过xml配置配置的,带有一些

这些对象是可变的,因为我希望将来重用它们,而不是创建新的对象。

我看到了这个问题:slf4j-log4j在传递给异步记录器之前将对象转换为字符串。但我相信无gc的行为可能不同于异步(正如在回答这个问题时提到的)。


共有1个答案

太叔超英
2023-03-14

Log4j2将在从日志方法返回之前在应用程序线程中呈现消息,以确保写入日志文件的内容是调用记录器时的值。

这适用于所有异步日志记录方法(async appender以及两种类型的异步日志记录程序)。对于无垃圾日志记录,其工作原理类似,唯一的区别是Log4j2内部使用的数据结构。消息在传递给后台线程之前呈现的事实是相同的。

有一个系统属性可以在后台线程中呈现消息,但我不建议这样做,除非您非常确信应用程序不会修改记录的对象。

 类似资料:
  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4

  • 我正在尝试设置log4j2以使用异步记录器将所有消息记录到滚动文件中。 是否有一种方法可以创建另一个记录程序来捕获所有事件?还有别的想法吗? 下面是我的log4j2.xml:

  • 背景: 在log4j2中,当使用asyncappender时,您可以将记录器的参数“blocking”设置为false,以便丢弃溢出缓冲区大小的任何日志,而不会减慢主线程的速度。(请参见asyncAppender下的此处。)https://logging.apache.org/log4j/2.x/manual/appenders.html) 我正在将我们的应用程序升级到这里找到的辉煌的asyncL

  • 基于https://logging.apache.org/log4j/2.x/manual/async.html我想使用混合同步和异步记录器的方法,以便从所有同步记录器的性能改进中获益。 基准代码: Log4j2配置正是文档中的配置(https://logging.apache.org/log4j/2.x/manual/async.html): 使用这种混合的同步/异步记录器配置,我可以每秒获得大

  • 使用log4j2,我很难让同步记录器和异步记录器一起工作。 从这里以Apache文档(标题为混合同步和异步记录器)为例,运行下面的应用程序将简单地创建日志文件,但不向其写入任何内容。我也不确定添加两个记录器指向同一个appender,但它的Apache留档,所以我假设这是好的。 LOG4J2配置 pom.xml 应用 但是,如果我更改log4j2配置并修改loggers元素以读取以下内容,我将在日

  • 我想让一些记录器异步在log4j2.properties文件。在xml格式中,您可以添加为 我在log4j2中试过了。作为记录器的属性=com foo Bar 但这种语法似乎是错误的。 正确的配置方法是什么?