在实际项目中,如果采用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>
文章作者:xiaohui249
本文链接:https://javatech.wang/index.php/archives/120/
版本所有 ©转载时必须以链接形式注明作者和原始出处