如何以编程方式加载 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
.
我想以编程方式加载 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
.