【发布时间】: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)并用于更改活动文件名。我很想知道是否有更简单/更清洁的方法来执行此操作,并且仍然可以使用不同的文件名正常进行归档。