如何强制logback在翻转时创建新文件

时间:2013-12-06 10:24:55

标签: java logback

我正在尝试使用logback实现与log4j相同的功能 - 一个基于大小和时间的滚动文件appender。 在滚动时,应使用当前时间戳创建新文件,但是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

如果我也想知道如何仅在翻滚日而不是尺寸上完成这项工作会很好,但这可能就足够了。

Java 1.7 with logback-1.0.9

1 个答案:

答案 0 :(得分:3)

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

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

$ bySecond在启动应用程序时只被分配一次,在每次回滚时都不会改变。时间戳只是一个变量。查看here

同时检查此one