Logback rollingFileAppender xml不会翻转或删除旧的存档日志

时间:2016-01-13 16:48:23

标签: java spring spring-boot logback

这是logback的一部分:

<appender name="APP_LOG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APP_HOME}/loader.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${APP_HOME}/archived/loader.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- Keep logs max for x days -->
            <maxHistory>1</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

    </appender>

这应该每天创建一个新的日志文件。今天是2016年1月13日,因此如果1月12日到2016年1月12日没有日志,它应该将当前日志放入loader.2016-01-12.0.log然后创建一个新的日志文件吗?它不是那样做的。

它也应该删除文件loader.2015-12-30.0.log和loader.2016-01-11.0.log,但它也没有这样做。

我所做的就是在基于Eclipse的IDE中启动应用程序,我可以验证每次运行应用程序时日志文件loader.log是否正在更改。这意味着logback正在启动,但由于某种原因,它没有正确清理旧文件。请帮帮忙?

1 个答案:

答案 0 :(得分:0)

TimeBasedRollingPolicy的Logback文档指定maxHistory的单位月,而不是天

关于在没有创建日志的情况下创建空日志文件(大小为0),我记得log4j没有创建它们。 log4j中的OOTB日志轮换是被动,只有在新的一天将日志语句发送到log4j时才会触发。

我认为Logback的行为类似,但我正在检查,我很快就会更新这个答案。

编辑: 已确认。对于上一个日志语句和当前日志语句之间的任何完全过去的中间天,TimeBasedRollingPolicy不会创建零大小的文件。

也就是说,如果您的每日轮换的上一个日志语句位于 2015-01-01 ,而您的下一个语句位于 2015-01-13 ,则后者处理语句,此时Logback仍然会打开 2015-01-01 的文件。它会注意到它会触发翻转,基本上包括:

  1. renaming the current file with the archival pattern - 和 -
  2. opening a new file
  3. 但它不会创建任何中间零字节文件。