Spring Boot 教程

Spring Boot 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spring_boot-logback-different-env-config.html

spring boot logback 多环境配置的两种方式

Spring Boot 笔记 Spring Boot 笔记


spring boot 自带多个 log 实现,其中也包括 logback,往往开发中,开发者需要根据环境,对日志有不一样的配置操作,如不希望线上出现 debug 日志,测试环境可以出现 debug 日志等等。

配置方法

由于 spring boot 自带多个 log 实现,首先需要将其余实现排除掉。

若 gradle 管理的项目,添加如下代码:

configurations {
    compile.exclude module: 'slf4j-log4j12'
    compile.exclude module: 'log4j-over-slf4j'
    compile.exclude module: 'slf4j-nop'
    compile.exclude module: 'spring-boot-starter-json'
}

如果是 maven 构建的项目,全局排除 spring boot log 有些小麻烦,spring boot 的很多 starter 都包含 spring-boot-starter-logging,它主要包含了 logback、log4j-to-slf4j 及 jul-to-slf4j 的实现,需要排除其余两项,具体如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在完成了 logback jar 包的正确导入之后,开始配置 logback.xml。

不同环境主要有两种配置方法,一种是每个环境单独一个类似 logback-{env}.xml 文件,另一种是在 logback.xml 文件内部利用 springProfile 标签分开配置

如上两种方法前提都是服务启动是设置 spring.active.profiles 参数,该选项是指定服务当前的环境,如常用的 local、dev、test、staging 和 prod 等。

第一种方法,spring boot 会根据不同环境加载 logback-{evn}.xml 配置项。

第二种方法,具体示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!-- 控制台日志 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M %L - %msg %n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- 文件日志 -->
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M %L - %msg %n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/file.%d{yyyyMMdd}.log</fileNamePattern>
        </rollingPolicy>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- 错误日志 -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M %L - %msg %n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/error.%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!-- server log -->
    <appender name="serverLogFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>server_log/server_log.%d{yyyyMMdd}.log</fileNamePattern>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <springProfile name="dev,pre,prod">
        <logger name="serverLogger" additivity="false">
            <appender-ref ref="serverLogFileAppender"/>
        </logger>

        <root level="INFO">
            <appender-ref ref="fileAppender"/>
            <appender-ref ref="consoleAppender"/>
            <appender-ref ref="errorAppender"/>
        </root>
    </springProfile>

    <springProfile name="local">
        <root level="INFO">
            <appender-ref ref="consoleAppender"/>
        </root>
    </springProfile>

</configuration>

 

Logback 在引入相关的 jar 包后,配置相应的 logback 配置文件即可。 ...
Spring Boot 基于 lettuce 配置多个 Redis 连接,这里基于 jdk 1.8,引入 spring data redis ...
这里收集了 Spring Boot 使用中常见的问题与解决方案等内容。 ...
Spring Boot 内置 Tomcat Web 容器,一般在实际操作中,采用默认配置,但是也可以根据实际情况调优内置容器,以提高服务性能 ...
Spring Boot 基于 MyBatis 配置多个 DB 数据源,这里基于 jdk 1.8,引入 spring boot 和 mybat ...