配置文件logback-spring.xml,否则springProperty不生效。
<?xml version="1.0" encoding="UTF-8" ?>
<!--文件命名为logback.xml或logback-spring.xml,建议logback-spring.xml-->
<!--
属性 可选值 说明 备注
scan true|false 开启扫描,配置变更时logback自动更新配置 默认空,即false
scanPeriod 30 (|milli(second)?|second(e)?|minute|hour|day)s? 扫描间隔: 数字 + 空格 + 日期单位 默认一分钟,若不指定时间单位,默认毫秒
debug true|false 注册OnConsoleStatusListener的简写模式,控制台输出logback内部日志 默认false
packagingData true|false 每行日志都输出包信息其所在jar包信息 对性能影响较大,1.1.4及以上版本默认false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false" packingData="false">
<!-- 引入默认配置,如%clr、%wEx转换器 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--
在配置文件中配置:
#单个日志最大大小
size_max=500MB
#日志保存天数
days_max=365
-->
<springProperty name="size_max" source="logging.logback.rollingpolicy.max-file-size" defaultValue="100MB"/>
<springProperty name="days_max" source="logging.logback.rollingpolicy.max-history" defaultValue="7"/>
<!--
变量定义:低版本可以通过<property> 来定义,1.0.7版本后可以通过<variable>等同于<property>,二者一样
使用: ${变量名}
指定默认值:以:- 分隔 ${name:-value}
-->
<springProfile name="dev">
<!-- windows 日志存储目录-->
<property name="logback.logDir" value="./logs"/>
<!-- configuration to be enabled when the "dev" profiles are active -->
</springProfile>
<springProfile name="prod">
<!-- configuration to be enabled when the "prod" profiles are active -->
<!-- linux 日志存储目录 -->
<property name="logback.logDir" value="${user.dir}/logs"/>
</springProfile>
<!-- 无颜色 -->
<property name="NOT_COLOR_LOG_PATTERN"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- 带颜色 -->
<property name="COLOR_LOG_PATTERN"
value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!--控制台输出日志设置-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder:指定输出日志格式化和字符集-->
<encoder>
<pattern>${COLOR_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到日志滚动文件-->
<!--FileAppender将日志事件追加到指定日志文件中-->
<!--使用RollingFileAppender,继承继承自FileAppender,支持日志分片和历史日志的自动删除-->
<!--
RollingFileAppender执行流程:
1、日志始终追加写入指定的日志文件中,若文件不存在则自动创建
2、按rollingPolicy配置的策略,当满足策略时,自动将file重命名为rollingPolicy中指定的归档日志文件名,生成历史归档日志,如 /temp/test.2023-04-12.log,并对归档日志进行压缩 和 过期日志删除。
3、循环 1-2
-->
<appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件的路径-->
<File>${logback.logDir}/info.log</File>
<!--append:true | false,是否以追加的方式写到日志文件,默认true-->
<append>true</append>
<!--encoder:指定输出日志格式化和字符集-->
<encoder>
<charset>UTF-8</charset>
<pattern>${NOT_COLOR_LOG_PATTERN}</pattern>
</encoder>
<!--prudent:安全模式,性能较差,一般不开启,默认false-->
<prudent>false</prudent>
<!--滚动(归档)策略, TimeBasedRollingPolicy:按照时间滚动(归档),超出指定时间范围的日志自动删除;
SizeAndTimeBasedRollingPolicy:按时间和文件大小滚动(归档)
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中-->
<FileNamePattern>${logback.logDir}/arch/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志保留时长(天)-->
<maxHistory>${days_max}</maxHistory>
<!--单个日志文件最大容量-->
<maxFileSize>${size_max}</maxFileSize>
<!--maxHistory内日志最大容量,到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
<!--cleanHistoryOnStart:项目启动时是否清理归档日志,默认false-->
<cleanHistoryOnStart>false</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!--将warn、error日志单独存储一份 -->
<appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--过滤器,过滤满足条件或者不满足条件的日志
LevelFilter:级别过滤器,匹配指定的日志级别
ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
的日志改名为今天的日期。即,<File> 的日志都是当天的。
-->
<File>${logback.logDir}/error.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>${logback.logDir}/arch/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- 单个日志文件最多 100MB -->
<maxFileSize>${size_max}</maxFileSize>
<!--只保留最近30天的日志-->
<maxHistory>${days_max}</maxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--<totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
<!--日志输出编码格式化-->
<encoder>
<charset>UTF-8</charset>
<pattern>${NOT_COLOR_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--使用<logger>标签指定{项目包路径}内的日志在控制台输出的级别为warn-->
<!--配置additivity="false",否则<root>中也配置了<appender-ref ref="console"/>,会重复输出日志。-->
<!-- <logger name="{项目包路径}" level="warn" additivity="false">-->
<!-- <appender-ref ref="console"/>-->
<!-- </logger>-->
<!--建议在<root>中引用所有<appender>-->
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="infoLog"/>
<appender-ref ref="errorLog"/>
</root>
</configuration>