如何验证log4j2是通过lmaxdisruptor异步记录的?

guicsvcw  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(480)

我正在开发一个eclipsercp应用程序,为了让log4j2在这个应用程序中工作,我付出了一些努力。现在一切似乎都很好,作为画龙点睛,我想让所有的记录器异步。
我已经设法在类路径上获得了lmax中断器,并且认为我已经解决了提供 sun.misc 也。设置vm参数 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 并正确设置log4j2.xml文件。我想。这就是问题所在。我希望能够验证我的应用程序以适当的方式异步登录,这样我就可以享受延迟方面的好处。
我如何-然后-验证我的记录器是异步工作的,在这个过程中使用lmax dirsuptor?

1bqhqjot

1bqhqjot1#

异步记录器有两种类型,由不同的类处理。
所有记录器异步 AsyncLogger 类-使用时激活 AsyncLoggerContextSelector 与异步记录器混合使用sync: AsyncLoggerConfig 类-当配置文件 <AsyncRoot> 或者 <AsyncLogger> 的配置中嵌套的元素 <Loggers> .
在您的例子中,您使所有记录器都异步,所以您希望将断点放在 AsyncLogger#logMessage(String, Level, Marker, Message, Throwable) .
另一种验证方法是设置 <Configuration status="trace"> 在配置文件的顶部。这将在配置log4j时输出内部log4j日志消息。您应该看到类似“启动asynclogger disruptor…”的内容。如果你看到这个,所有的记录器都是异步的。

oprakyz7

oprakyz72#

在中放置断点 org.apache.logging.log4j.core.async.AsyncLoggerConfig#callAppenders . 然后你就可以看到这个事件被放入干扰器。同样地 org.apache.logging.log4j.core.config.LoggerConfig#callAppenders 同步日志应该被命中,或者异步日志应该被中断器的另一端命中(此时一切又是同步的)。

相关问题