我正在开发一个eclipsercp应用程序,为了让log4j2在这个应用程序中工作,我付出了一些努力。现在一切似乎都很好,作为画龙点睛,我想让所有的记录器异步。
我已经设法在类路径上获得了lmax中断器,并且认为我已经解决了提供 sun.misc
也。设置vm参数 -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
并正确设置log4j2.xml文件。我想。这就是问题所在。我希望能够验证我的应用程序以适当的方式异步登录,这样我就可以享受延迟方面的好处。
我如何-然后-验证我的记录器是异步工作的,在这个过程中使用lmax dirsuptor?
2条答案
按热度按时间1bqhqjot1#
异步记录器有两种类型,由不同的类处理。
所有记录器异步
AsyncLogger
类-使用时激活AsyncLoggerContextSelector
与异步记录器混合使用sync:AsyncLoggerConfig
类-当配置文件<AsyncRoot>
或者<AsyncLogger>
的配置中嵌套的元素<Loggers>
.在您的例子中,您使所有记录器都异步,所以您希望将断点放在
AsyncLogger#logMessage(String, Level, Marker, Message, Throwable)
.另一种验证方法是设置
<Configuration status="trace">
在配置文件的顶部。这将在配置log4j时输出内部log4j日志消息。您应该看到类似“启动asynclogger disruptor…”的内容。如果你看到这个,所有的记录器都是异步的。oprakyz72#
在中放置断点
org.apache.logging.log4j.core.async.AsyncLoggerConfig#callAppenders
. 然后你就可以看到这个事件被放入干扰器。同样地org.apache.logging.log4j.core.config.LoggerConfig#callAppenders
同步日志应该被命中,或者异步日志应该被中断器的另一端命中(此时一切又是同步的)。