Appearance
通用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(---){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:- } --- ${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>