Skip to content

通用logback配置

xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 转换规则 来自SpringBoot的defaults.xml-->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!-- 配置 -->
    <property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
    <!--    <property name="LOG_FILE_PATH" value="logs"/>-->
    <!-- 获取yml中的log地址 -->
    <springProperty scope="context" name="LOG_FILE_PATH" source="system.logs.path" defaultValue="logs"/>


    <!-- 控制台格式化输出 -->
    <property name="PATTERN_DEFAULT"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%-5level) %clr(%logger{89}->%M:%line){cyan} : %clr(%msg%n){faint}"/>
    <!--
            <property name="PATTERN_DEFAULT"
                      value="${PATTERN_DEFAULT:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSSx}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta}  %clr(-&#45;&#45;){faint} %clr(${LOGGED_APPLICATION_NAME:-}[%t]){faint} %clr(${LOG_CORRELATION_PATTERN:-}){faint}%clr(%logger{39}:%line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    -->

    <!-- 文件输出格式 -->
    <property name="PATTERN_FILE"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{89}->%M:%line : %msg%n"/>
    <!--
            <property name="PATTERN_FILE"
                      value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSSx}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } -&#45;&#45; ${LOGGED_APPLICATION_NAME:-}[%t] ${LOG_CORRELATION_PATTERN:-} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    -->

    <!-- 控制台 Appender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">     
        <encoder>
            <pattern>${PATTERN_DEFAULT}</pattern>
            <charset>${CONSOLE_LOG_CHARSET}</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>


    <!-- 文件 Appender info, warn, error-->
    <!-- 参考 Spring Boot 的 file-appender.xml 编写 -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
            <charset>${CONSOLE_LOG_CHARSET}</charset>
        </encoder>
        <!-- 日志文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${LOG_FILE_PATH}/info_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!-- 启动服务时,是否清理历史日志,一般不建议清理 -->
            <cleanHistoryOnStart>false</cleanHistoryOnStart>
            <!-- 日志文件,到达多少容量,进行滚动 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志文件的总大小,0 表示不限制 -->
            <totalSizeCap>0</totalSizeCap>
            <!-- 日志文件的保留天数 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
            <charset>${CONSOLE_LOG_CHARSET}</charset>
        </encoder>
        <!-- 日志文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${LOG_FILE_PATH}/warn_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!-- 启动服务时,是否清理历史日志,一般不建议清理 -->
            <cleanHistoryOnStart>false</cleanHistoryOnStart>
            <!-- 日志文件,到达多少容量,进行滚动 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志文件的总大小,0 表示不限制 -->
            <totalSizeCap>0</totalSizeCap>
            <!-- 日志文件的保留天数 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>warn</level>
        </filter>
    </appender>

    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
            <charset>${CONSOLE_LOG_CHARSET}</charset>
        </encoder>
        <!-- 日志文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${LOG_FILE_PATH}/error_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!-- 启动服务时,是否清理历史日志,一般不建议清理 -->
            <cleanHistoryOnStart>false</cleanHistoryOnStart>
            <!-- 日志文件,到达多少容量,进行滚动 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志文件的总大小,0 表示不限制 -->
            <totalSizeCap>0</totalSizeCap>
            <!-- 日志文件的保留天数 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>error</level>
        </filter>
    </appender>

    <!-- 异步写入日志,提升性能 -->
    <appender name="ASYNC_INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
        <queueSize>256</queueSize>
        <appender-ref ref="FILE_INFO"/>
    </appender>

    <appender name="ASYNC_WARN" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
        <queueSize>256</queueSize>
        <appender-ref ref="FILE_WARN"/>
    </appender>

    <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
        <queueSize>256</queueSize>
        <appender-ref ref="FILE_ERROR"/>
    </appender>

    <!-- 根日志级别及关联的输出目标 -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC_INFO"/>
        <appender-ref ref="ASYNC_WARN"/>
        <appender-ref ref="ASYNC_ERROR"/>
        <!--        <appender-ref ref="FILE_INFO"/>-->
        <!--        <appender-ref ref="FILE_WARN"/>-->
        <!--        <appender-ref ref="FILE_ERROR"/>-->
    </root>

    <logger name="com.example.dialtesting" addtivity="false">
        <level value="debug"/>
    </logger>

    <!-- 设置Logback内部日志级别为ERROR -->
    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

</configuration>