玩转Logback(二)配置篇

590 阅读1分钟

上一篇大概总揽了Logback,这一篇集中精力看xml配置文件。以下是一个涵盖大部分常用配置项的典型xml文件,每一项功能以注释方式标出,比较直观。文件名是logback-spring.xml,放在Spring Boot的resources目录下。

<?xml version="1.0" encoding="UTF-8"?>
<!--scan默认true,当xml发生改变,会被自动重新加载;debug默认false,为true将打印出日志的日志-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">

<!--    变量名和变量值,可以通过${变量名}引用-->
    <property name="APP_NAME" value="blog" />
    <property name="LOG_HOME" value="./logs" />

<!--    指定日志输出的目的地,这个appender把日志输出到控制台-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--        对日志进行格式化-->
        <encoder>
<!--            %d表日期,%thread表线程名,%-5level表级别(从左显示5个字符宽度)
                %logger输出日志的class类名,{25}最长25个字符
                %line行号,%msg日志内容,%n换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{25}:%line %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

<!--    这个appender的目的地是滚动记录文件-->
    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--        滚动策略,TimeBasedRollingPolicy是最常用的滚动策略,根据时间来制定策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--            被写入的文件名,本项目是project根目录下logs/blog-xxx.log -->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--            保留log文件的最大数量,超过就删除旧文件,以下是保留7个月-->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{25}:%line %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

<!--    这个appender是异步输出日志文件-->
    <appender name="asyncFile" class="ch.qos.logback.classic.AsyncAppender">
<!--        队列剩余容量为20%时,不丢弃低级别如INFO, DEBUG, TRACE事件。默认-1 -->
        <discardingThreshold>0</discardingThreshold>
<!--        队列深度,默认256-->
        <queueSize>2048</queueSize>
<!--        提取调用者信息数据,如代码行号。对性能有少许影响,默认false-->
        <includeCallerData>true</includeCallerData>
<!--        对应名字为rollingFile的appender,将其异步输出-->
        <appender-ref ref="rollingFile" />
    </appender>

<!--    某一个包或某一个类的日志打印级别-->
    <logger name="org.springframework" level="WARN"/>
    <logger name="org.hibernate.SQL" level="WARN"/>

<!--    使用spring扩展profile支持,此配置文件要以logback-spring.xml命名 -->
<!--    开发环境下的日志配置-->
    <springProfile name="dev">
<!--        根logger,指定日志级别,采用哪个appender,可以采用多个appender-->
        <root level="info">
            <appender-ref ref="stdout" />
            <!-- <appender-ref ref="rollingFile" /> -->
        </root>
    </springProfile>
<!--    h2环境下的日志配置-->
    <springProfile name="h2">
        <root level="info">
            <appender-ref ref="stdout" />
        </root>
    </springProfile>
<!--    docker环境下的日志配置-->
    <springProfile name="docker">
        <root level="info">
            <appender-ref ref="asyncFile" />
        </root>
    </springProfile>

</configuration>