【问题标题】:How can I configure Logback to rotate files hourly for n days?如何将 Logback 配置为每小时轮换文件 n 天?
【发布时间】:2017-01-04 09:59:14
【问题描述】:

我想每小时轮换一次日志文件,并在替换之前将它们保留 n 天。例如 2 天,这意味着如果不满足 totalSizeCap,我应该看到 48 个日志文件。

<appender name="missing_fields" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/missing_fields.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>logs/missing_fields_%d{yyyyMMdd-HH}.log</fileNamePattern>
    <maxHistory>48</maxHistory>
    <totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
   <pattern>%date#%level#%logger#thread#%message%n%xException</pattern>
</encoder>

我得到的是日志文件每小时轮换一次,但只有 24 小时。所以在那之后,logback 开始替换文件而不是保留 48 小时。

例如我希望看到: missing_field_20170104-10.log 一天后 missing_field_20170105-10.log,

虽然它只保留日志文件 24 小时。

【问题讨论】:

  • 我建议逐字粘贴您的代码,或者明确添加的重点。否则,诊断问题变得困难。

标签: java logging logback


【解决方案1】:

根据documentation,您应该将配置更改为

<maxHistory>48</maxHistory>

【讨论】:

  • 这就是我所做的,但它不起作用。 *48* 是为了强调。它只创建 24 个日志文件,然后开始替换,不起作用是否有意义?谢谢
【解决方案2】:

official documentation 中,您将找到以下示例:

<configuration>
<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>20GB</totalSizeCap>
</rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>


   <root level="DEBUG">
        <appender-ref ref="ROLLING" />
   </root>

</configuration>

除了“%d”之外,还要注意“%i”转换标记。 %i 和 %d 标记都是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2011-12-17
    • 2023-03-30
    • 1970-01-01
    • 2015-09-05
    • 2017-12-19
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多