Spring Boot日志之Logback(三)—— 多环境配置

限于喜欢 提交于 2020-02-28 09:41:19

多数人在开发过程中,会在Windows系统上进行开发,但是对于测试和生产环境,一般都采用的是Linux系统。如何在多环境之间切换而不需要频繁的修改Logback相关配置呢?这就要依赖于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配置文件中加载。

PS:以上内容均参考 Logback中文网

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!