未应用Log4j2环境变量

z4iuyo4d  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(152)

我的项目依赖于一个jar,它(在我需要的其他东西中)包括了许多项目的公共日志配置。我可以更新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.

我想提供选择加入替代文件(例如log4j2-good.xml)。由于文档中说明环境变量(特别是LOG4J_CONFIGURATION_FILE)应该优先于log4j2.component.properties,我似乎可以将log4j2-good.xml添加到jar中,并且希望选择加入的使用者可以在运行时将LOG4J_CONFIGURATION_FILE环境变量设置为log4j2-good.xml,log2j2.xml
但是,这似乎并不起作用。
我在jar中添加了一个Main类来进行测试,它包含了一些日志语句和这个静态块:

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

所以log4j 2使用了错误的配置,但是我的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'])
}

结果相同。
我错过了什么!

相关问题