03 May 2018

SpringBoot的Profile概念可以帮助开发者灵活配置不同环境下的设置。对于日志打印来说,不同环境使用不同的日志目录、日志级别是很常见的需求,幸好SpringBoot对此提供了支持,可以实现类似if...else的逻辑判断,根据不同的Profile采用不同的日志配置。参见SpringBoot文档

以logback为例,可以在配置文件中添加标签<springProfile name="dev"></springProfile>标签,并在这对标签中添加普通的logback配置内容。这样,只有当前Profile为dev时,标签中的配置才会生效。示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev,staging">
        <logger name="guru.springframework.controllers" level="DEBUG" additivity="false">
            <appender-ref ref="CONSOLE" />
        </logger>>
    </springProfile>
    <springProfile name="prod">
        <logger name="guru.springframework.controllers" level="WARN" additivity="false">
            <appender-ref ref="FILE" />
        </logger>
    </springProfile>
</configuration>

上面的配置文件中,针对dev stagingprod设置了不同的logger。在启动SpringBoot后,对针对不同的Profile采用不同的配置。

需要注意的是,由于日志组件的初始化在Spring之前,因此,采用上面的方法时,需要将日志配置文件命名为loggback-spring.xml