通常开发时我们都需要将日志输出到控制台,以便阅读,但发布到生产环境时,又是禁止将日志输出到控制台的,怎么办呢?三种方式
手动开关
例如,开发时使用
<root>
<appender-ref ref="FILE-INFO"/>
<appender-ref ref="FILE-ERROR"/>
<appender-ref ref="STDOUT"/>
</root>
上线时,再将输出到控制台的 appender 删除掉
<root>
<appender-ref ref="FILE-INFO"/>
<appender-ref ref="FILE-ERROR"/>
</root>
这个方法最简单但是也最容易忘记
多个配置文件
例如,生产时,使用默认的配置文件 logback.xml
开发时,使用 logback-dev.xml
测试时,使用 logback-test.xml
通过在启动时设置系统属性参数,指定 logback 的配置文件即可
java -Dlogback.configurationFile=/path/to/logback-dev.xml
在 idea 中可以配置多个 Run Configuration
动态表达式
这个方式最不常见,今天刚从 logback 文档上看到
可以像 mybatis 一样支持在 xml 中动态的配置,例如下面,通过 env 选择配置
<if condition='"dev".equals(property("env"))'>
<then>
<root>
<appender-ref ref="FILE-INFO"/>
<appender-ref ref="FILE-ERROR"/>
<appender-ref ref="STDOUT"/>
</root>
</then>
<else>
<root>
<appender-ref ref="FILE-INFO"/>
<appender-ref ref="FILE-ERROR"/>
</root>
</else>
</if>
不过,除了需要修改 logback.xml 文件外,还需要引入janino用于条件解析
<!-- The org.codehaus.janino:commons-compiler:3.1.6 dependency -->
<!-- will be automatically pulled in by Maven's transitivity rules -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.6</version>
</dependency>
启动时,指定 env 属性即可
java -Denv=dev
这个方式时最骚的,最不常见的。虽然可以秀一波,但是不建议生产这么玩,多引入了一个库,多了些复杂度