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

回到顶部