SpringBoot中使用logback&slf4j

32 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

稍有学习,但项目中使用还需要更深入的测试了解

集成

//实际项目不需要像如下依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

//spring-boot-starter-web包含spring-boot-starter
//spring-boot-starter包含spring-boot-starter-logging

//所以pom中只要依赖如下即可使用logbak+slf4j,不许重复依赖spring-boot-starter-logging
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

xml配置

配置文件位置->resources目录下
配置文件名->logback-config.xml
引用配置文件->properties中配置logging.config=classpath:logback-config.xml

xml配置内容解释

configuration[根元素1]

    property[元素:属性变量0~*]
        name[属性1]
        level[属性0~1-TRACE/DEBUG/INFO/WARN/ERROR/ALL/OFF]
        additivity[属性0~1-true/false]
    
    appender[元素:附加器0~*]
        name[属性1:apeender名称]
        class[属性1:指定要实例化的apeender类的完全限定名称]
        layout[元素0~1]
        encoder[元素0~*]
            class[属性1]
            pattern[元素:控制输出日志的格式]
            charset[元素]
        filter[元素0~*]
            class[属性1-LevelFilter/ThresholdFilter]

    logger[元素:记录器0~*]
        appender-ref[元素0~*:引用的每个appender都被添加到logger]

    root[元素:根记录器0~1]
        level[属性1-TRACE/DEBUG/INFO/WARN/ERROR/ALL/OFF]
        appender-ref[元素0~*:引用的每个appender都被添加到根记录器]

示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--0~*常量-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>

    <!--0~*appender=>负责写日志的组件-->
    <!--ConsoleAppender=>控制台打印-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--日志过滤=>ThresholdFilter过滤低于level的日志/LevelFilter接受拒绝符合或不符合level的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>-->

        <encoder><!--class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"-->
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset><!--class="java.nio.charset.Charset"-->
        </encoder>
    </appender>
    <!--RollingFileAppender=>滚动记录日志-->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append><!--是否追加默认true-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件名-->
            <fileNamePattern>logs/project_info_%d.%i.log</fileNamePattern>
            <!--最多保留文件数量-->
            <maxHistory>10</maxHistory>
            <!--日志文件最大占用空间-->
            <totalSizeCap>1GB</totalSizeCap>
            <!--活动文件大小默认10MB-->
            <maxFileSize>1KB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/project_error_%d.%i.log</fileNamePattern>
            <maxHistory>20</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--0~*记录器=>设置一个包或者类的日志打印级别additivity默认true-->
    <logger name="org.springframework" level="ERROR" additivity="true">
        <appender-ref ref="info"/>
    </logger>


    <!--0~1root-->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <!--<appender-ref ref="info"/>
            <appender-ref ref="error"/>-->
        </root>
    </springProfile>

</configuration>