我正在尝试在当前在 liberty 配置文件服务器中运行的 REST Web 方法中设置异步日志记录(出于性能原因)。
为了做到这一点,我设置了以下属性:
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
我的问题是,无论我在哪里执行此操作,有时它可以工作并且记录速度非常快,有时却不能。
我已经在包含所有 REST Web 方法的类的构造函数中尝试了 (a)
(b) 在 REST 方法之前调用的过滤器 doFilter 方法中
(c) 在过滤器初始化方法中
(d) 在 REST 方法本身中
这些位置都不能始终如一地工作。
任何人都可以对此行为提供解释,如果可能的话,提供解决问题的建议方法。
编辑:看来 log4j 在调用 setProperty 之前正在初始化。所以我需要做的是通过自由配置文件设置属性。
有一种未记录的方法可以为您的项目设置此值,而无需在启动期间手动传入系统属性值。
添加一个名为log4j2.component.properties
到你的类路径。这可以在大多数 Maven 或 gradle 项目中通过将其保存在src/main/resources
.
这个文件很简单java.util.Properties
文件。通过将以下行添加到文件来设置上下文选择器的值。
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
Log4j 将首先尝试读取系统属性。如果系统属性为空,则默认情况下它将回退到存储在该文件中的值。
执行此设置的代码位于Log4jContextFactory.java:91 https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jContextFactory.java#L91.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)