简介
logback-spring.xml 是 Logback 日志框架的一个特殊配置文件,它主要用于与 Spring Boot 应用集成。logback-spring.xml 允许 Spring Boot 应用程序利用 Spring 的环境和其他特性(如 profile 切换)来配置 Logback。这使得在开发、测试和生产环境中灵活配置日志变得非常容易。
背景
积累知识。
教程
这里主要用于实现日志滚动策略:按天进行回滚,只保留近30天日志,日志总大小不超过2G,超过限制大小会删除最旧的日志,并且设置了在项目启动时就进行日志清理。
logback-spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--官网配置参考: https://logback.qos.ch/manual/appenders.html-->
<configuration>
<!-- 彩色控制台控制 -->
<substitutionProperty name="log.pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
<substitutionProperty name="log.pattern.no" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
<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="LOG_FILE_DIR" source="logback.log-file-dir"
defaultValue = "log"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern.no}</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径,每天滚存-->
<fileNamePattern>${LOG_FILE_DIR}\info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--单位天受%d{yyyy-MM-dd}影响-->
<!--保留30天日志(保留近30天日志, 删除近30天至近60天日志, 更旧的日志不会删除-->
<maxHistory>30</maxHistory>
<!--总日志大小,日志满时删除最旧的日志,优先级低于maxHistory-->
<totalSizeCap>2GB</totalSizeCap>
<!--正常日志清除在第二天的第一个事件触发,如果在0点23分47秒内没有事件触发,则在0点23分47秒进行日志清除-->
<!--程序启动时执行日志清除-->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern.no}</pattern>
<!--<pattern>%msg%n</pattern>-->
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径,每天滚存-->
<fileNamePattern>${LOG_FILE_DIR}\error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--单位天受%d{yyyy-MM-dd}影响-->
<!--保留30天日志(保留近30天日志, 删除近30天至近60天日志, 更旧的日志不会删除-->
<maxHistory>30</maxHistory>
<!--总日志大小,日志满时删除最旧的日志,优先级低于maxHistory-->
<totalSizeCap>2GB</totalSizeCap>
<!--正常日志清除在第二天的第一个事件触发,如果在0点23分47秒内没有事件触发,则在0点23分47秒进行日志清除-->
<!--程序启动时执行日志清除-->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>