SpringBoot整合logback日志框架

一、基本情况概述

1、SpringBoot默认集成了logback框架,想要修改为log4j日志框架,需要排除默认的log实现

2、配置spring的日志输出形式有两种方式

①通过application.properties里面进行简单的设置

②通过外置的logback-spring.xml配置文件进行显式配置

二、简单的application.properties配置

此种方式只支持默认的logback日志形式,通过logging开头的属性进行简单的预定义配置项设置,较为简单,满足一些简单的需求。例如,建议使用STS(Spring Tool Suits)工具,有较好的提示

#日志设置
#springboot所有内部核心logger(包括嵌入式tomcat, mybatis, hibernate, spring)输出更多内容,自己应用并不会输出
debug=false
#彩色输出
spring.output.ansi.enabled=detect

#外置的配置文件位置,设置之后,以下的一些日志配置失效
logging.config=classpath:logback-spring.xml
logging.file.path=./log
#logging.file.name=./spring.log
logging.file.max-history=7
logging.file.max-size=10MB
logging.pattern.rolling-file-name=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.level.com.example=info
#logging.pattern.console=
#logging.pattern.file=
#激活哪个日志配置
spring.profiles.active=prod

三、通过传统的外置配置文件形式

说明,文件名一定设置为logback-spring.xml, 利用这种方式可以通过<springProfile> 标签进行生产环境和开发环境的快捷设置,

通过在application.properties文件中的

spring.profiles.active=prod

进行设置即可,网上找的也都差不多,觉得不够详细的,可以查找相关记录进行修改

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds"
    debug="false">
    <contextName>warning_message_receiver</contextName>
    <property name="pattern"
        value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{60}:%line] - %msg%n" />
        <!-- windows机器上进行运行测试的日志记录地址 -->
    <property name="LOG_HOME" value="./log"></property>
    <!-- 部署之后的日志地址 -->
    <!-- <property name="LOG_HOME" value="/var/project/run/log/"></property> -->

    <!-- LEVEL:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF -->
     <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    
    <!-- 控制台输出 -->
    <appender name="STDOUT"
        class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 输出到文件 -->
    <!-- <appender name="fileAppender"
        class="ch.qos.logback.core.FileAppender">
        <file>${LOG_HOME}/data_cleaning.log</file>
        <append>true</append>
        <encoder
            class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender> -->
    <!-- 滚动输出到文件 -->
    <!-- RollingFileAppender的<file>子节点可有可无,通过设置<file>,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变; 
        如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“”会被当做目录分隔符。 -->
    <appender name="traceRollingFileApppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/warning_message_receiver_TRACE.log</file>
        <!-- RollingPolicy实际上就是负责日志文件的切换以及重命名的。包括日志文件归档,计算日志文件名,压缩工作等 -->
        <!-- 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 必要节点,包含文件名及"%d"转换符,"%d"可以包含一个java.text.SimpleDateFormat指定的时间格式,默认格式是 yyyy-MM-dd -->
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_TRACE%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
            <!-- TriggeringPolicy 负责RollingFileAppender何时发生日志滚动 -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>20</maxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>${pattern}</pattern>
        </layout>
        <!-- LevelFilter: 级别过滤器,根据日志级别进行过滤 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="infoRollingFileApppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/warning_message_receiver_INFO.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_INFO%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>20</maxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>${pattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="warnRollingFileApppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/warning_message_receiver_WARN.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_WARN%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>20</maxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>${pattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="errorRollingFileApppender"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/warning_message_receiver_ERROR.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_ERROR%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>20</maxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <pattern>${pattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <springProfile name="dev">
        <!-- 配置com.example包的日志规则 -->
        <logger name="com.example" level="info" additivity="false">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="infoRollingFileApppender" />
            <appender-ref ref="traceRollingFileApppender" />
            <appender-ref ref="warnRollingFileApppender" />
            <appender-ref ref="errorRollingFileApppender" />
        </logger>
    </springProfile>
    <springProfile name="prod">
        <!-- 配置com.example包的日志规则 -->
        <logger name="com.example" level="info" additivity="false">
            <!-- <appender-ref ref="STDOUT" /> -->
            <appender-ref ref="infoRollingFileApppender" />
            <appender-ref ref="traceRollingFileApppender" />
            <appender-ref ref="warnRollingFileApppender" />
            <appender-ref ref="errorRollingFileApppender" />
        </logger>
    </springProfile>
    
    <!-- 根节点日志规则 -->
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
View Code

四、拓展

通过application.properties里面设置debug=true可以开启spring更详细的日志;

采用外置配置文件,则通过修改<root>节点的level属性为debug即可

参考网址 : https://www.cnblogs.com/jpfss/p/8341920.html

极简版本:https://www.edoou.com/articles/1574161445933464

原文地址:https://www.cnblogs.com/marshwinter/p/13158578.html