SpringBoot日志之Logback(三)——多环境配置
Logback多环境配置
Logback多环境配置的方法有很多种,这里只说一下自己用到的两种(前提是Logback的配置信息在logback-spring.xml文件中配置)。
通过 springProfile
标签控制
springProfile
标签,有一个属性 name,其值为指定的环境名。用下面的例子来说明:
<configuration scan="false" debug="true"> <contextName>logback</contextName>
<property name="log.path" value="./logs"/>
<property name="log.pattern" value="%-4relative [%thread] %-5level %logger{35} - %msg %n"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log.log</file>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/file/log-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<springProfile name="test">
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
</configuration>
从上述配置中,可以看到定义了两个appender:一个叫做CONSOLE,用于把日志输出到控制台;另一个叫做FILE,用于把日志输出到文件中。同时还定义了两个不同环境的root配置:dev环境下,给root添加了叫做CONSOLE的appender;test环境下,给root添加了叫做FILE的appender。
通过指定application配置文件中的 spring.profiles.active=dev
或者通过指令 java -jar xx.jar --spring.profiles.active=dev
运行程序时,会发现日志只在控制台输出。同样的,当指定为test环境时,日志也只在文件中输出。
PS:实际用IDE开发时,可能未指定
spring.profiles.active
,那么Logback默认的环境名为 default,即Logback会调用<springProfile name="default">
的配置。
PS:输出到文件的appender,只要其配置生效,即使在当前的环境下,并未使用,也会生成相应的目录和文件信息。
通过不同环境引入不同文件控制
先定义两个不同的Logback配置文件,放置于logback文件夹下面,文件内容如下:
- logback-dev.xml文件
<included> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</included>
- logback-test.xml文件
<included> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log.log</file>
<encoder>
<pattern>${log.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/file/log-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</included>
然后根据不同的 spring.profiles.active
引入不同的文件到logback-spring.xml中来实现控制,logback-spring.xml文件如下:
<configuration scan="false"> <contextName>logback</contextName>
<property name="log.path" value="./logs"/>
<property name="log.pattern" value="%-4relative \[%thread\] %-5level %logger{35} - %msg %n"/>
<include resource="logback/logback-${spring.profiles.active}.xml"/>
</configuration>
PS:这里需要注意以下几点:
spring.profiles.active
定义在application文件中的话,并不会生效,Logback只会去加载名为 logback-spring.profiles.active_IS_UNDEFINED.xml 的文件,需要设置其系统环境变量方可生效。- 用于引入的Logback配置文件的根路径必须为
<included>
。
假如又想通过当前方法实现,又不想配置多余的系统环境变量,能实现不?当然可以,只不过需要读取下Spring Boot中的变量信息。那么如何读取Spring Boot中变量呢?通过 <springProperty>
即可。
<springProperty>
有四个属性:
- scope:声明该变量的作用域;
- name:声明该变量的名称;
- source:声明该变量绑定的环境变量中值的信息;
- defaultValue:声明该变量的默认值,即在环境变量中未找到信息时的值。
所以上边的logback-spring.xml文件亦可改为:
<configuration scan="false"> <contextName>logback</contextName>
<property name="log.path" value="./logs"/>
<property name="log.pattern" value="%-4relative \[%thread\] %-5level %logger{35} - %msg %n"/>
<springProperty scope="context" name="profile" source="spring.profiles.active" defaultValue="dev"/>
<include resource="logback/logback-${profile}.xml"/>
</configuration>
此时,Spring Boot的application文件中的配置便可生效了。同样的,像日志的存放路径等,都是和环境有关的,都可以从Spring Boot的application配置文件中加载。
以上是 SpringBoot日志之Logback(三)——多环境配置 的全部内容, 来源链接: utcz.com/z/513769.html