未应用 Log4j2 环境变量

Log4j2 environment variables are not applied

我的项目依赖于一个 jar,它(除了我需要的其他东西)包括许多项目的通用日志记录配置。我可以更新 jar,但不能破坏与现有消费者的兼容性。罐子包含:

src
|-- main/resources
|   |-- log4j2-bad.xml // not actually named `-bad` but a config I want to overwrite for a unique use case without losing the other classes in the jar
|   `-- log4j2.component.properties //contents=`log4j2.configurationFile=log4j2-bad.xml,log4j2.xml`
`-- test/resources
    `-- log4j.xml // normally the consumer provides their own `log4j2.xml` file.

我想在 src/main/resources 中提供一个可选的替代文件(例如 log4j2-good.xml)。由于 documentation says 环境变量(特别是 LOG4J_CONFIGURATION_FILE)应该优先于 log4j2.component.properties,看来我可以将 log4j2-good.xml 添加到 jar,而消费者想要选择加入可以安排 LOG4J_CONFIGURATION_FILE 环境变量在 运行 时为 log4j2-good.xml,log2j2.xml

然而,这似乎不起作用。

我在 jar 中添加了 Main class 以进行测试。它包含一些日志记录语句和这个静态块:

static {
    System.out.println("LOG4J_CONFIGURATION_FILE: " + System.getenv().get("LOG4J_CONFIGURATION_FILE"));
}

当我设置 $env:LOG4J_CONFIGURATION_FILE=log4j2-good.xml,log4j2.xml 和 运行 时,我得到:

2021-11-17 21:39:32,091 main DEBUG Apache Log4j Core 2.14.1 initializing configuration org.apache.logging.log4j.core.config.composite.CompositeConfiguration@6ee52dcd [configurations=[XmlConfiguration[location=C:\<snip>\bin\main\log4j2-bad.xml], XmlConfiguration[location=C:\<snip>\bin\test\log4j2.xml]], mergeStrategy=org.apache.logging.log4j.core.config.composite.DefaultMergeStrategy@4493d195, rootNode=null, listeners=[org.apache.logging.log4j.core.LoggerContext@2781e022], pluginPackages=[], pluginManager=org.apache.logging.log4j.core.config.plugins.util.PluginManager@57e1b0c, isShutdownHookEnabled=true, shutdownTimeoutMillis=0, scriptManager=null]
<snip>
LOG4J_CONFIGURATION_FILE: log4j2-good.xml,log4j2.xml

所以 log4j2 使用了错误的配置,但是我的 Main 说环境变量指定了正确的配置。

当我打开 Windows 系统属性并设置系统环境变量时...同样的事情。 当我 运行 一个 gradle 任务时:

task runGoodConfig(type: JavaExec) {
  classpath = sourceSets.test.runtimeClasspath
  main = 'com.my.sample.Main'
  environment(['LOG4J_CONFIGURATION_FILE':'log4j2-good.xml,log4j2.xml'])
}

同样的结果。

我错过了什么!?

这是一个 confirmed bug 版本 2.14.1(至少)。