Logback 教程

Logback 笔记

Logback 按时间(天、小时)、文件大小,分割/切割日志文件,并设置保存时间

Logback 使用时,配置文件、日志级别、日志分割等问题的相关解答 Logback 使用时,配置文件、日志级别、日志分割等问题的相关解答


日志的不同维度分割在实际业务中比较常见,如在线特征日志打印比较多,可能用一定的时间粒度进行分割,也有按照文件大小进行分割,以保证日志的迁移便利性、磁盘空间的节省等作用。

按时间分割

按时间分割日志,一般主要是按天、小时等粒度进行分割,甚至有些可能按分钟时间粒度进行切割日志。

在 logback 里时间分割的对应 rolling 策略类是 ch.qos.logback.core.rolling.TimeBasedRollingPolicy,并在 fileNamePattern 的配置中添加一个日期目录:%d{yyyyMMdd,aux},具体示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <Pattern>%msg %n</Pattern>
        </encoder>

        <!-- 按时间分割 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件的路径与名称,{yyyyMMdd-HH} 精确到小时,则按小时分割保存 -->
            <fileNamePattern>
                demo_logs/%d{yyyyMMdd,aux}/demo.%d{yyyyMMdd-HH}.log
            </fileNamePattern>

            <!-- 如果当前是按小时保存,则保存 120 小时(= 5 天)内的日志 -->
            <MaxHistory>120</MaxHistory>
        </rollingPolicy>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <root level="INFO">
        <appender-ref ref="fileAppender"/>
    </root>

</configuration>

从如上示例中,我们发现时间配置中,出现了 aux 的模式配置符,它的意思是说,可以在 fileNamePattern 配置中添加多个 %d 的日期符号,但是只能有一个是主要的,其它的只能做为辅助(auxiliary)。在 RollingCalendar 类中,日志的文件滚动方式就是根据主 %d 那个日期判断的。