登录:SizeAndTimeBasedRollingPolicy将totalSizeCap应用于maxHistory中的每一天

Igg*_*ydv 6 logging logback logback-classic

登录版本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>
Run Code Online (Sandbox Code Playgroud)

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

有谁知道这个问题,这个问题已经解决,还是我在配置中做错了?

ris*_*kop 2

看来你发现了一个bug!

\n\n

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

\n\n

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

\n\n

我已经提出了一个问题:https ://jira.qos.ch/browse/LOGBACK-1361

\n\n

根据 G\xc3\xbclc\xc3\xbc 它将在 logback classic 1.3.0 中修复。

\n\n

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

\n

  • 但对我来说情况似乎并非如此。例如,如果我将 MaxHistory 设置为 1(1 天),totalsizeCap 设置为 1GB,那么它将在前一天保存大约 1GB 的 100MB 文件。在第二天,前一天的文件不会被删除,并且追加器仅滚动到具有当前日期的文件。它看起来像这样 `core-2017-12-12.01.log` `...` `core-2017-12-12.10.log` `core-2017-12-13.03.log` `...` `core -2017-12-13.13.log`,您可以看到附加器在今天的日志文件上滚动,但保留 maxHistory 中的任何内容不变 (2认同)
  • 我想我可以重现你的问题,至少当滚动间隔很短时(滚动是每秒一次)。我的测试在这里:https://github.com/riskop/slf4j_logback_SizeAndTimeBasedRollingPolicy_problem 你能在你的环境中检查一下吗?我在xubuntu 16、openjdk8上尝试过。 (2认同)
  • 我创建了一个 logback 问题:https://jira.qos.ch/browse/LOGBACK-1361 (2认同)