Logback:SizeAndTimeBasedRollingPolicy 不遵守 totalSizeCap

Logback: SizeAndTimeBasedRollingPolicy not honoring totalSizeCap

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

这是我的 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>

这是 logback 中的错误还是我没有正确配置滚动文件附加程序?

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

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

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

bug 1166 根本不会将 totalSizeCap 应用到前两个 time units,取决于最小的单位您正在使用的 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。因此,我们将最后 两小时 设置为不设上限,而不是 最后两天 ,对于我们的情况,它是可以省略的。当然,日志文件每小时都会开始更新,但正如我所说,对于我们的特殊情况来说没问题。