我试图在当前在自由配置文件服务器中运行的REST Web方法中设置异步日志记录(出于性能原因).
为此,我设置了以下属性:
System.setProperty("Log4jContextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
我的问题是,无论我在哪里这样做,有时它的工作和记录非常快,有时它不会.
我已经在包含所有REST Web方法的类的构造函数中尝试过(a)
(b)在REST方法之前调用的过滤器doFilter方法中
(c)在过滤器初始化方法中
(d)在REST方法本身
这些位置都不一致.
解决方法
有一种未记录的方法为您的项目设置此值,而无需在启动期间手动传入系统属性值.
将名为log4j2.component.properties的文件添加到类路径中.这可以在大多数maven或gradle项目中通过将其保存在src / main / resources中来完成.
这个文件只是java.util.Properties文件.通过将以下行添加到文件来设置上下文选择器的值.
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
Log4j将首先尝试读取系统属性.如果系统属性为null,则默认情况下它将回退到存储在此文件中的值.
执行此设置的代码位于Log4jContextFactory.java:91.