You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式读取Log4j 2配置,解决启动阶段获取配置异常问题

Log4j v2启动阶段读取自定义配置属性问题

我正在使用第三方log4j v2 Appender组件,它支持接入我自主编写的自定义类,接入后Appender会通过反射机制创建这些自定义类的实例。
也就是说:我的自定义类是由Appender负责实例化的,而Appender本身是Log4j正常启动流程的一部分,我无法控制这个第三方库提供的Appender的实例化逻辑。
我希望从Log4j配置中读取自定义类需要使用的若干属性,这些属性本身和日志功能相关,放在Log4j配置中是合理的。
目前我还没有找到正确的实现方案,现在我在自定义类的构造方法中写了如下代码:

LoggerContext loggerContext = LoggerContext.getContext(true);
if (loggerContext != null) {
    Configuration config = loggerContext.getConfiguration();
    if (config != null) {
        StrSubstitutor strSubstitutor = config.getStrSubstitutor();
        if (strSubstitutor != null) {
            StrLookup variableResolver = strSubstitutor.getVariableResolver();
            if (variableResolver != null) {
                String myVar = variableResolver.lookup("myPropertyName");
            }
        }
    }
}

但这段逻辑存在问题:在启动阶段执行上述代码时,Log4j的配置还没有完成初始化,因此调用

LoggerContext.getContext(true).getConfiguration()

返回的是DefaultConfiguration实例,这个实例里显然不包含我自定义的属性。我实际想要获取的是XmlConfiguration实例,在Log4j完全启动完成之后的任意时间调用上述代码,都能正常拿到XmlConfiguration实例,也能正常读取到我定义的自定义属性。

内容的提问来源于stack exchange,提问作者peterh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:54:03