如何强制 logback 在翻转时创建新文件
Posted
技术标签:
【中文标题】如何强制 logback 在翻转时创建新文件【英文标题】:How to force logback to create a new file on rollover 【发布时间】: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-%dyyyy-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 也滚动活动文件:省略我不确定,但让我尝试解决它。滚动事件发生后,“my-20131206105823.log”文件的内容将被复制到“my-2013-12-06.0.log.gz”,您将再次获得具有相同旧名称的新文件,即“我的-20131206105823.log”。
<file>$logback.PREFIX-$bySecond.log</file>
$bySecond 仅在您启动应用程序时分配一次,它不会在每次回滚时更改。时间戳只是一个变量。检查here
也可以查看one。
【讨论】:
确实,这就是问题所在。一种方法是扩展 RollingFileAppender 并在每个翻转事件上创建新文件。考虑到所有其他变量只初始化一次,我在想可能有一个 logback 配置设置允许这样做。以上是关于如何强制 logback 在翻转时创建新文件的主要内容,如果未能解决你的问题,请参考以下文章
Log4j,Log4j2,Logback,Slf4J日志框架你真的了解吗?阿里巴巴Java开发手册为什么强制推荐使用Slf4j?