【问题标题】:Logback: SizeAndTimeBasedRollingPolicy applies totalSizeCap to each day in maxHistoryLogback:SizeAndTimeBasedRollingPolicy 将 totalSizeCap 应用于 maxHistory 中的每一天
【发布时间】:2018-05-24 23:27:58
【问题描述】:

Logback 版本 1.2.3

我想在我们的 logback 配置文件 (logback.xml) 中使用 SizeAndTimeBasedRollingPolicy,但此时 SizeAndTimeBasedRollingPolicy 无法按预期运行。 (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy)

理想情况下,我希望保留不晚于 ex 的日志。 90 天,每个文件不超过 100MB,总存档大小为 ex。总共 10GB。

就目前而言,totalSizeCap 应用于 MaxHistory 范围内的每个条目。 例如。

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

上述 XML 配置将创建跨越 60 天的日志,每天应用 1GB 的 totalSizeCap。这将导致总存档大小为 60GB,而不是预期的 1GB。如果在一天中达到 totalSizeCap,当天的日志将通过删除当天最旧的文件开始翻转,这将在日志历史记录中产生间隙,这是我们不希望的。解决此错误的方法是使用年度滚动,而不是每天或每月滚动,不幸的是,当使用 SizeAndTimeBasedRollingPolicy 时,年度滚动不起作用。

有谁知道这个问题,是否已解决,或者我在配置中做错了什么?

【问题讨论】:

    标签: logging logback logback-classic


    【解决方案1】:

    看来你发现了一个bug!

    日志中不应有间隙。达到 totalSizeCap 时,应删除最旧的日志文件。当达到 maxHistory 时,应该删除最旧的日志文件。

    不幸的是,logback 中似乎存在一个错误,导致日志记录出现间隙,因为没有删除最旧的文件。在此处查看演示:https://github.com/riskop/slf4j_logback_SizeAndTimeBasedRollingPolicy_problem

    我打开了一个问题:https://jira.qos.ch/browse/LOGBACK-1361

    根据 Gülcü 的说法,它将在 logback classic 1.3.0 中修复。

    请注意,您可以在 logback 的 Jira 上“投票”该问题!

    【讨论】:

    • 这对我来说似乎不是这样。例如,如果我将 MaxHistory 设置为 1(1 天)并将 totalsizeCap 设置为 1GB,那么它将为前一天节省大约 1 GB 的 100MB 文件。在第二天,前一天的文件不会被删除,appender 只会在当前日期的文件上滚动。它看起来像这样core-2017-12-12.01.log...core-2017-12-12.10.logcore-2017-12-13.03.log...core-2017-12-13.13.log,因为您可以看到附加程序在今天的日志文件上滚动,但在 maxHistory 中保留了任何内容
    • 我想我可以重现您的问题,至少在滚动间隔很短的情况下(滚动是每秒)。我的测试在这里:github.com/riskop/… 你能在你的环境中检查它吗?我在 xubuntu 16、openjdk8 上试过了。
    • 我为 logback 创建了一个问题:jira.qos.ch/browse/LOGBACK-1361
    • 非常感谢您提出问题!
    • 有机会在 1.2.x 分支中修复这个问题吗?
    猜你喜欢
    • 2016-08-29
    • 2018-11-03
    • 2021-11-17
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多