私はRollingFileAppenderをTimeBasedRollingPolicyで使用していますので、真夜中に新しいログファイルが作成され、古いログは10日間保存されます。 真夜中に新しいログファイルが作成されますが、古いログファイルはすぐに、時には数分後にも削除されます。logback:TimeBasedRollingPolicy日次ローリングは動作しますが、古いログファイルはすべて削除されます
public static void init(String logfilename,String loggername,String pattern) throws Exception {
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
logfilename = new File(logfilename).getCanonicalPath();
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(context);
encoder.setPattern(pattern);
encoder.start();
RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
rollingFileAppender.setContext(context);
rollingFileAppender.setName(loggername);
rollingFileAppender.setEncoder(encoder);
rollingFileAppender.setAppend(true);
rollingFileAppender.setFile(logfilename+".log");
TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>();
rollingPolicy.setContext(context);
rollingPolicy.setParent(rollingFileAppender);
rollingPolicy.setFileNamePattern(logfilename+".%d{yyyy-MM-dd}.log");
rollingPolicy.setMaxHistory(10);
rollingPolicy.setTotalSizeCap(FileSize.valueOf("100MB"));
rollingPolicy.setCleanHistoryOnStart(false);
rollingPolicy.start();
rollingFileAppender.setRollingPolicy(rollingPolicy);
rollingFileAppender.start();
Logger logger = (Logger)LoggerFactory.getLogger(loggername);
logger.setAdditive(false);
logger.setLevel(Level.INFO);
logger.detachAndStopAllAppenders();
logger.addAppender(rollingFileAppender);
}
この場合、MaxHistoryは10日を意味するはずですが、動作しません。
アーカイブされたファイルが保持されている10日の結果となる 'maxHistory'とともに、1日のロールオーバー期間(これはfileNamePattern:'%d {yyyy-MM-dd} 'から推測されます)を設定しています。しかし、あなたは 'totalSizeCap'を指定しています。この上限を超えると、logbackはアーカイブファイルを削除します。この上限を超えている可能性はありますか? – glytching
'rollingPolicy.setTotalSizeCap(FileSize.valueOf(" 100MB "));'行を削除してみることができますか?つまり、ファイルサイズがその制限に達していないかどうかを確認できますか? –
私はすでにtotalSizeCapを使わずに試してみましたが、同じ結果が出ました。 100MBの制限にも達していません。 –