根据不同的 Profile 激活不同的 Log4j2 配置

1、概览

本文将带你了解如何在 Spring Boot 中根据不同的 Profile 激活不同的 Log4j2 配置。

2、使用不同的配置文件

例如,假设我们有两个文件:log4j2.xmllog4j2-dev.xml,一个用于默认配置文件,另一个用于 dev Profile。

创建 application.properties 文件,指定日志配置文件:

logging.config=/path/to/log4j2.xml

接着,为 dev Profile 创建一个名为 application-dev.properties 的新 properties 文件,并添加类似的日志配置:

logging.config=/path/to/log4j2-dev.xml

如果还有其他的 Profile,例如 prod,只需为其创建一个名称相似的 properties 文件 - application-prod.properties。特定 Profile 的属性总是优先于默认属性。

3、编程式配置

可以通过更改 Spring Boot Application 类,以编程方式选择使用哪个 Log4j2 配置文件:

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private Environment env;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... param) {
        if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
            Configurator.initialize(null, "/path/to/log4j2-dev.xml");
        } else {
            Configurator.initialize(null, "/path/to/log4j2.xml");
        }
    }
}

Configurator 是 Log4j2 库的一个类。它提供了几种使用配置文件位置和各种可选参数构建 LoggerContext 的方法。

这种解决方案有一个缺点:应用启动过程不会使用 Log4j2 记录日志。

4、总结

本文介绍了在 Spring Boot 应用中为不同 Profile 启用不同 Log4j2 配置的 2 种方法。一是根据不同的 Profile 配置文件加载不同的 Log4j2 配置,二是以编程式在运行时加载不同的 Log4j2 配置。


Ref:https://www.baeldung.com/spring-log4j2-config-per-profile