滚动时使用SizeAndTimeBasedFNATP时未删除最旧的归档文件,并且最旧的时间间隔有多个归档文件

时间:2013-03-13 15:36:06

标签: logback

maxHistory参数的实现方式似乎存在问题。 我用时间间隔(每分钟)多次滚动 这里),创建以下文件:(maxHistory = 3)

  • trace.log(活动文件)
  • trace-2013-03-13-16.14.0.log.zip
  • trace-2013-03-13-16.13.0.log.zip
  • trace-2013-03-13-16.12.2.log.zip
  • trace-2013-03-13-16.12.1.log.zip
  • trace-2013-03-13-16.12.0.log.zip

发生nex时间翻转,删除了16.13.0.log.zip文件 不是最老的(12. {0,1,2},正如我所料。是这样的 预期的行为?

 public static Logger createTimeAndSizeRollingLogger(String fileBase, String maxSize, int maxHistory, String resolutionPattern) {
    LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
    RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<ILoggingEvent>();
    appender.setContext(loggerContext);
    appender.setFile(fileBase + ".log");

    TimeBasedRollingPolicy<ILoggingEvent> timePolicy = new TimeBasedRollingPolicy<ILoggingEvent>();
    timePolicy.setFileNamePattern(fileBase + "_%d{" + resolutionPattern + "}-%i.log.zip");
    timePolicy.setContext(loggerContext);
    timePolicy.setMaxHistory(maxHistory);
    timePolicy.setParent(appender);
    appender.setRollingPolicy(timePolicy);

    SizeAndTimeBasedFNATP<ILoggingEvent> rollingPolicy = new SizeAndTimeBasedFNATP<ILoggingEvent>();
    rollingPolicy.setMaxFileSize(maxSize);
    rollingPolicy.setTimeBasedRollingPolicy(timePolicy);
    rollingPolicy.setContext(loggerContext);

    timePolicy.setTimeBasedFileNamingAndTriggeringPolicy(rollingPolicy);
    timePolicy.start();
    rollingPolicy.start();
    PatternLayoutEncoder encoder = new PatternLayoutEncoder();
    encoder.setContext(loggerContext);
    encoder.setPattern("%msg%n");
    encoder.start();

    appender.setEncoder(encoder);
    appender.start();

    Logger logger = loggerContext.getLogger(fileBase);
    logger.setLevel(Level.TRACE);
    logger.addAppender(appender);
    StatusPrinter.print(loggerContext);
    return logger;
}

2 个答案:

答案 0 :(得分:0)

这似乎是在最新的1.1.0 SNAPSHOT中修复的 http://jira.qos.ch/browse/LOGBACK-162

答案 1 :(得分:0)

这是一个已知问题。 MaxHistory不适用于SizeAndTimeBasedFNATP。 您可以查看here

你会发现很多人说它已经解决了,但事实并非如此。如果要修复它,可以编辑位于logback-core内的SizeAndTimeBasedFNATP.java。你可以看到它here。在我看来,里面isTriggeringEvent是添加代码的地方。