如何验证log4j2是否通过LMAX干扰器异步记录?

2022-09-02 12:59:55

我正在开发一个Eclipse RCP应用程序,并且已经费尽心思让log4j2在应用程序中工作。现在一切似乎都运行良好,作为最后的润色,我想异步制作所有记录器

我已经设法在类路径上获得了LMAX Disruptor,并且认为我也解决了提供的问题。在运行配置中设置 VM 参数,并正确设置 log4j2.xml 文件。我想。这就是问题所在。我希望能够以正确的方式验证我的应用程序是否异步记录,以便我可以在延迟方面享受好处。sun.misc-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

那么,我如何验证我的记录仪是否正在异步工作,并在此过程中使用LMAX Dirsuptor?


答案 1

有两种类型的异步记录器,由不同的类处理。

  1. 所有记录器异步:类 - 使用时激活AsyncLoggerAsyncLoggerContextSelector
  2. 混合同步与异步记录器:类 - 当您的配置文件具有 或 元素嵌套在 的配置中时。AsyncLoggerConfig<AsyncRoot><AsyncLogger><Loggers>

在您的情况下,您正在使所有记录器异步,因此您希望将断点放入 。AsyncLogger#logMessage(String, Level, Marker, Message, Throwable)

另一种验证方法是在配置文件的顶部进行设置。这将输出内部 log4j 在 log4j 上配置的日志消息。您应该会看到类似“正在启动 AsyncLogger disruptor...”的内容。如果您看到此情况,则所有记录器都是异步的。<Configuration status="trace">


答案 2

在 中放置一个断点。然后,您可以观看事件被放入干扰器中。同样,对于同步日志记录,或者从中断器的另一侧被击中以进行异步日志记录(此时一切都再次同步)。org.apache.logging.log4j.core.async.AsyncLoggerConfig#callAppendersorg.apache.logging.log4j.core.config.LoggerConfig#callAppenders


推荐