在实际项目中,如果采用TimeBasedRollingPolicy切分日志文件,每天生成一个日志文件,有时候该文件的体积也会比较大,不利于查看。那么,我们想每日的文件是不是还可以根据大小进行切分呢?答案是:可以的。使用:SizeAndTimeBasedRollingPolicy,从这个类名就可以看出来,该策略是从时间和文件大小两个维度进行切分文件的。本文紧接着《springboot工程中使用slf4j+logback实现日志唯一编号》来介绍如何使用该策略。
一、依赖版本说明
从官方文档的一段描述可知,从logback-1.1.7版本开始提供该策略,之前是使用的SizeAndTimeBasedFNATP。具体描述如下:
In versions prior to 1.1.7, this document mentioned a component called SizeAndTimeBasedFNATP. However, given that SizeAndTimeBasedFNATP offers a simpler configuration structure, we no longer document SizeAndTimeBasedFNATP. Nevertheless, earlier configuration files using SizeAndTimeBasedFNATP will continue to work just fine. In fact, SizeAndTimeBasedRollingPolicy is implemented with a SizeAndTimeBasedFNATP subcomponent.
二、策略配置
直接上配置代码,关键标签使用注释进行了描述。
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/current.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
<!-- 单个日志文件最大数据量 -->
<maxFileSize>512KB</maxFileSize>
<!-- 日志文件最大数据量 -->
<totalSizeCap>1GB</totalSizeCap>
<!-- 日志文件保留天数 -->
<MaxHistory>15</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{logId}] [%thread] %-5level %logger{60}[%L] - %msg%n</pattern>
</encoder>
</appender>