1

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

次回のロールオーバーが発生すると、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;
}
4

2 に答える 2

0

これは、最新の 1.1.0 SNAPSHOT http://jira.qos.ch/browse/LOGBACK-162で修正されているようです。

于 2013-03-14T07:57:42.037 に答える
0

これは既知の問題です。MaxHistory は、SizeAndTimeBasedFNATP では機能しません。ここで確認できます

多くの人が解決したと言っていますが、そうではありません。修正したい場合は、logback-core 内にある SizeAndTimeBasedFNATP.java を編集できます。ここで見ることができます。内部 isTriggeringEvent は、私の意見ではコードを追加する場所です。

于 2015-11-20T14:54:41.127 に答える