Logback: SizeAndTimeBasedRollingPolicy 不尊重 totalSizeCap

2022-09-03 06:44:25

我正在尝试以这样一种方式管理我的日志记录:一旦我最旧的存档日志文件达到总累积大小限制或达到其最大历史记录限制,它们就会被删除。在 Logback 1.1.7 中使用时,滚动文件追加器将继续创建新的存档,尽管超出了设置。SizeAndTimeBasedRollingPolicytotalSizeCap

这是我的logback.xml文件供参考:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="file"
        class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>${USERPROFILE}/testlogs/test.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>
                ${USERPROFILE}/testlogs/%d{yyyy-MM-dd_HH}/test%i.log.zip
            </fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50KB</maxFileSize>
            <totalSizeCap>200KB</totalSizeCap>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p - %m%n</pattern>
        </encoder>

    </appender>

    <root level="INFO">
        <appender-ref ref="file" />
    </root>
</configuration>

这是日志备份中的错误,还是我没有正确配置滚动文件追加器?


答案 1

这是Logback 1.1.7中的错误。请参见: http://jira.qos.ch/browse/LOGBACK-1166

我已经检查过,在Logback 1.1.8-SNAPSHOT中工作。totalSizeCap


答案 2

好吧,即使问题得到了回答,我也想发布我们所做的工作,直到在1.1.8中修复错误为止。

bug 1166 根本不将 totalSizeCap 应用于前两个时间单位,这取决于您正在使用的 fileNamePattern 上的最小单位,这意味着对于您的方案,它不会考虑 totalSize 上限的前两个小时的日志。

我的配置在某种程度上就像从logback站点示例中获取的一样;

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <!-- daily rollover -->
  <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

  <!-- keep 30 days' worth of history capped at 3GB total size -->
  <maxHistory>30</maxHistory>
  <totalSizeCap>3GB</totalSizeCap>

</rollingPolicy>

因此,我们简单地从 {yyyy-MM-dd} 切换到 {yyyy-MM-dd_HH},当然,maxHistory 最大化到 30*24。因此,我们使最后两个小时不被限制,而不是最后两天,对于我们的情况,它是可以省略的。当然,日志文件将每小时开始滚动更新,但正如我所说,对于我们独特的情况来说,这是可以的。


推荐