logback-spring.xml配置文件(最佳实践)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="../logs"/>
    <springProperty scope="context" name="LOG_NAME" source="spring.application.name"/>
    <springProperty scope="context" name="spring.profiles.active" source="spring.profiles.active"/>
    <springProperty scope="context" name="log.level.root" source="logging.level.root" defaultValue="INFO"/>

    <springProperty name="HIGH_FREQUENCY_EXPRESSION" source="logging.high-frequency-expression" defaultValue="com.pkgPath(需要修改为自己的项目包名)" />
    
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <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"/>
    <!-- 彩色日志格式 -->
    <springProperty scope="context" name="common-pattern-color" source="logging.common-pattern-color"
                    defaultValue="[${LOG_NAME}:${server.port}-%clr(${PID}){magenta}-%X{tid}-%X{userid}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint}%clr([%5p]){blue} %clr([%X{traceId}]){yellow} %clr([%t:%r]){orange} %clr([%logger{50}.%X{M}:%X{L}]){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <springProperty scope="context" name="common-pattern" source="logging.common-pattern"
                    defaultValue="[${LOG_NAME}:${server.port}-${PID}-%X{tid}-%X{userid}] %d{yyyy-MM-dd HH:mm:ss.SSS}[%5p] [%X{traceId}] [%t:%r] [%logger{50}.%X{M}:%X{L}] %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <jmxConfigurator/>

    <!-- 控制台实时输出,采用高亮语法,用于开发环境 -->
    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- <level>${log.level.console}</level>-->
        </filter>
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${common-pattern-color}</Pattern>
            </layout>
        </encoder>
    </appender>
    <!-- 控制台异步实时输出 -->
    <appender name="ASYNC_CONSOLE_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <!-- 新增这行为了打印栈堆信息 -->
        <includeCallerData>true</includeCallerData>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="CONSOLE_APPENDER"/>
    </appender>

    <!-- 整个项目的所有日志, 包括第三方包 -->
    <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/log.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每天一归档 -->
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/log/log-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <!--单文件最大限制-->
            <maxFileSize>128MB</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>3</maxHistory>
            <!-- 日志总大小 -->
            <totalSizeCap>10GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${common-pattern}</Pattern>
            </layout>
        </encoder>
    </appender>
    <appender name="ASYNC_ROOT_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="ROOT_APPENDER"/>
    </appender>

    <!-- 异常日志,不能使用异步,必须确保打印 -->
    <appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/error/error-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <!--单文件最大限制-->
            <maxFileSize>128MB</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>60</maxHistory>
            <!-- 日志总大小 -->
            <totalSizeCap>10GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${common-pattern}</Pattern>
            </layout>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!--普通频率-->
    <appender name="INFO_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/info/info-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <!--单文件最大限制-->
            <maxFileSize>128MB</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>7</maxHistory>
            <!-- 日志总大小 -->
            <totalSizeCap>10GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${common-pattern}</Pattern>
            </layout>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    
    <!-- 全量记录,建议生成环境使用 -->
    <root level="${log.level.root}">
        <!--控制台-->
        <appender-ref ref="ASYNC_CONSOLE_APPENDER"/>
        <!--全量日志,异步打印-->
        <appender-ref ref="ASYNC_ROOT_APPENDER"/>
        <!--异常日志,不异步-->
        <appender-ref ref="ERROR_APPENDER" />
        <!--低频日志,不异步打印-->
        <appender-ref ref="INFO_APPENDER" />
    </root>
    
</configuration>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容