Log4j2实现加载不同模块的配置文件

在有的场景下,会出现各个业务模块独立配置自己的log4j2.xml配置文件。如果是单个log4j2.xml,只需要放到classes目录下即可自动加载,如果是多个分散在不同目录下的配置文件怎么办呢?

实现方法主要有两步:
- 将log4j2升级到2.11版本;
- 获取到这些配置文件;
- 将这些配置文件加载到环境变量中。

将log4j2升级到2.11版本

据我所知,最新的log4j-2.11.0.jar才支持环境变量配置多个文件路径,至少log4j-2.3.0版本是不支持的。会报错,错误原因就是文件路径不正确,因为把多个文件路径同时作为字符串传进去了。
所以,第一步就是到官网下载最新版本的log4j2,我用的是log4j2-2.11.0,是可以的。

从项目中获取这些配置文件

就是写代码获取项目中所有log4j2.xml,可以设置规则log4j2-*.xml,然后遍历项目文件获取到这些配置文件。最好的方法是要求所有的配置文件在同一个目录下。

将配置文件加载到环境变量

log4j2的初始化方法是支持从环境变量中获取配置文件的,多个配置文件用,隔开, 环境变量的key是log4j.configurationFile
假设已经获取到配置文件放到一个list集合中,代码如下:

public static void initLog4j(){
    List<String> configFiles = getConfigFiles();
    String fileNames = Joiner.on(",").join(configFiles);
    System.setProperty("log4j.configurationFile",fileNames);
}

通过上述步骤即可,然后在启动Main方法中调用该方法即可。

public static void main(String[] args){
    Log4jInitor.initLog4j();
}

你可能感兴趣的:(Java)