如何以编程方式加载 log4j2 XML 配置文件并使其生效

How to programatically load a log4j2 XML config file AND have it take effect

我想以编程方式加载 log4j2 XML 配置。

我的配置文件没有问题,以下两种方法有效。 第一,将其重命名为 log4j2.xml 并将其放入类路径中(但我有多个,所以这是为了实验)。第二,这样做(可行,但我正在维护一些旧代码,宁愿尝试保持它们的机制完好无损)

static {
    File _l4 = new File (DATA_DIR + File.separator + LOG_CONFIG_FILENAME);
    System.setProperty("log4j2.configurationFile", _l4.toURI().toString());
}

根据我在这里的发现,这应该可行。

FileInputStream fileInputStream = new FileInputStream(pConfigFilename);
ConfigurationSource configurationSource = new ConfigurationSource(fileInputStream);
Configurator.initialize(null, configurationSource);

它似乎确实像我 .toString() 一样加载文件,它表明它已经加载了字节数 - 这恰好是配置文件的大小。 None 它的作品虽然。所有日志记录都转到标准输出。所以它正在加载,但没有生效。

Configurator.initialize 仅在 创建 LoggerContext 之前有效。

如果您设置了 log4j2.configurationFile 属性,它应该可以在静态块中工作。如果由于某种原因你需要在加载配置文件之前,你需要使用Configurator.reconfigure.