gpt4 book ai didi

java - 如何在 logback 启动时滚动日志文件

转载 作者:IT老高 更新时间:2023-10-28 20:40:19 30 4
gpt4 key购买 nike

我想配置 logback 来执行以下操作。

  • 记录到文件
  • 当文件达到 50MB 时滚动文件
  • 只保留 7 天的日志
  • 在启动时总是生成一个新文件(滚动)

除了最后一项,启动滚动之外,我已经完成了所有工作。有谁知道如何实现这一目标?这是配置...

  <appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">

<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg \(%file:%line\)%n</Pattern>
</layout>

<File>server.log</File>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>server.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 7 days' worth of history -->
<MaxHistory>7</MaxHistory>

<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>50MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>

</rollingPolicy>
</appender>

最佳答案

其他建议都不适合我的情况。我不想使用基于大小和时间的解决方案,因为它需要配置 MaxFileSize,而且我们使用的是严格基于时间的策略。以下是我在启动时使用 TimeBasedRollingPolicy 完成滚动文件的方法:

@NoAutoStart
public class StartupTimeBasedTriggeringPolicy<E>
extends DefaultTimeBasedFileNamingAndTriggeringPolicy<E> {

@Override
public void start() {
super.start();
nextCheck = 0L;
isTriggeringEvent(null, null);
try {
tbrp.rollover();
} catch (RolloverFailure e) {
//Do nothing
}
}

}

诀窍是将 nextCheck 时间设置为 0L,这样 isTriggeringEvent() 就会认为是时候滚动日志文件了。因此它将执行计算文件名所需的代码,以及方便地重置 nextCheck 时间值。随后对 rollover() 的调用导致日志文件滚动。由于这只发生在启动时,它是比在 isTriggerEvent() 中执行比较的解决方案更优化的解决方案。不管这个比较有多小,当对每条日志消息执行时,它仍然会稍微降低性能。这也强制在启动时立即发生翻转,而不是等待第一个日志事件。

@NoAutoStart 注释对于防止 Joran 在所有其他初始化完成之前执行 start() 方法很重要。否则,你会得到一个 NullPointerException。

这里是配置:

  <!-- Daily rollover appender that also appends timestamp and rolls over on startup -->
<appender name="startupDailyRolloverAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyyMMdd}_%d{HHmmss,aux}</fileNamePattern>
<TimeBasedFileNamingAndTriggeringPolicy class="my.package.StartupTimeBasedTriggeringPolicy" />
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

希望这会有所帮助!

关于java - 如何在 logback 启动时滚动日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492022/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com