Spring Boot支持多种log插件,这里说的是logback。
准确说来,这次要介绍的有两点:
- profiles与logback
- 从logback中获取配置文件中的信息
有一点需要先说明,这里先要把logback.xml的名字改为logback-spring.xml。
官网上明确说了,如果不改名字,使用logging.config会出现一些问题,所以我们直接把名字改了比较好。
profiles与logback
一般的配置文件都会有四个:application、dev、staging和prod。相信这几个不需要我来解释了。
有些时候生成日志也可能在不同环境下要求标准不一样,这就有了在log中对环境选择的需求。
标签能够在标签的任何位置使用。官方示例如下:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev, staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
现在我来给出具体示例,我想在不同的环境下,log文件的路径不同:
具体代码,方便大家拷贝:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds">
<springProperty scop="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<springProfile name="dev">
<fileNamePattern>/logs/dev/myconfig.%d{yyyy-MM-dd}.log</fileNamePattern>
</springProfile>
<springProfile name="prod">
<fileNamePattern>/logs/prod/myconfig.%d{yyyy-MM-dd}.log</fileNamePattern>
</springProfile>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${fluentHost} %d{yyyy-MM-dd HH:mm:ss}: %p [%t] %c{1} %F:%L - %m%n</pattern>
</encoder>
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${fluentHost} %d{yyyy-MM-dd HH:mm:ss}: %p [%t] %c{1} %F:%L - %m%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
</configuration>
我这里只是做演示,没有定义staging环境。
我给dev和prod环境配置了不同的log文件生成路径,分别使dev文件生效和prod生效会有我们期望的效果。
application.properties中的配置:
spring.profiles.active=dev
这是使dev生效,是prod生效的时候将上面改为prod即可。具体效果不做演示了。
从logback中获取配置文件中的信息
现在来看第二点,从配置文件中读取配置信息,也是大多数朋友想要的功能。
这里要用到标签。
官网示例:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
source的内容为application.properties中定义的信息,defaultValue为缺省值,name就是在这个配置文件中的变量名,scope固定值,使用${}来获取值。
看示例:
<springProperty scop="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
这行代码配置在logback-spring.xml中,在上面有给出完整的信息。
在下边任意位置可以使用${fluentHost}来获取配置文件中的内容,如果没有配置,既可以获得缺省值localhost。
application.properties中的配置:
myapp.fluentd.host=8.8.8.8
这些内容很简单,也很实用,关于这些如果有问题可以给我留言。