【问题标题】:How to force logback to create a new file on rollover如何强制 logback 在翻转时创建新文件
【发布时间】:2013-12-06 10:24:54
【问题描述】:

我正在尝试使用 logback 实现与当前使用 log4j 相同的功能 - 一个大小和时间基准的滚动文件附加程序。 滚动时应使用当前时间戳创建新文件,但 logback 仍会写入旧文件。

我正在使用类似的东西:

<timestamp key="bySecond" datePattern="yyyyMMddkkmmss"/> 

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
  <file>${logback.PREFIX}-${bySecond}.log</file> 
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>${logback.PREFIX}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> 
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
        <maxFileSize>1GB</maxFileSize> 
    </timeBasedFileNamingAndTriggeringPolicy> 
  </rollingPolicy> 

想要的行为:

  • 应用程序以 my-20131206105823.log 开头
  • 发生滚动事件(1GB 或午夜)
  • my-2013-12-06.0.log.gz 文件已创建
  • 应用程序恢复登录 my-20131207000001.log

当前行为:

  • 应用程序以 my-20131206105823.log 开头
  • 发生滚动事件(1GB 或午夜)
  • my-2013-12-06.0.log.gz 文件已创建
  • 应用程序恢复登录 my-20131206105823.log

如果我也能了解如何仅在当天翻转而不是尺寸上完成此操作,那就太好了,但这可能就足够了。

带有 logback-1.0.9 的 Java 1.7

【问题讨论】:

  • 作为更新,有一种方法可以让 appender 也滚动活动文件:省略 参数,这意味着 appender 将始终写入由 fileNamePattern 定义的文件。但这仍然没有达到我想要的行为。
  • 最后我扩展了 TimeBasedRolling 策略以接受一个额外的 activeFilename 参数(类似于 fileNamePattern)并用于更改活动文件名。我很想知道是否有更简单/更清洁的方法来执行此操作,并且仍然可以使用不同的文件名正常进行归档。

标签: java logback


【解决方案1】:

我不确定,但让我尝试解决它。滚动事件发生后,“my-20131206105823.log”文件的内容将被复制到“my-2013-12-06.0.log.gz”,您将再次获得具有相同旧名称的新文件,即“我的-20131206105823.log”。

<file>${logback.PREFIX}-${bySecond}.log</file>

$bySecond 仅在您启动应用程序时分配一次,它不会在每次回滚时更改。时间戳只是一个变量。检查here

也可以查看one

【讨论】:

  • 确实,这就是问题所在。一种方法是扩展 RollingFileAppender 并在每个翻转事件上创建新文件。考虑到所有其他变量只初始化一次,我在想可能有一个 logback 配置设置允许这样做。
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2021-12-28
  • 2022-11-11
  • 2022-10-12
相关资源
最近更新 更多