本番環境で、状況によってはログ ファイルがロールオーバーされないという問題に直面しています。Log4j バージョン 1.2.17 と apache.commons-logging を使用しています。ファイルをロールオーバーするためのカスタム アペンダーが作成されます。アペンダーは、Log4j の FileAppender を拡張しています。subAppend(LoggingEvent event) メソッドのアルゴリズムは次のとおりです。
long n = System.currentTimeMillis();
// Has the time come to roll the log file?
if (n >= nextCheck)
{
now.setTime(n);
nextCheck = rc.getNextCheckMillis(now);
rollOver();
reachedMaxSize = false;
else
{
File f = new File(getFile());
// Has the log file has exceeded its maximum size?
if (!reachedMaxSize && f.length() > maxFileSize)
{
// Log file has reached it maximum size.
reachedMaxSize = true;
// Log one last message to the file stating the max has been reached.
LoggingEvent exeededEvent = new LoggingEvent(
getClass().getName(),
Logger.getLogger(getClass().getName()),
Priority.ERROR,
"Maximum log file size has been reached ("+maxFileSize/1024+"KB)",
null);
super.subAppend(exeededEvent);
}
// If the log has not reached its max size, write it. Otherwise,
// send log event to stdout.
if (!reachedMaxSize)
{
super.subAppend(event);
}
else
{
System.out.println(event.getRenderedMessage());
}
Log4j.properties ファイルは次のとおりです。
log4j.rootLogger=INFO,RCFLog
log4j.appender.RCFLog=com.ge.medit.util.logging.MaxFileSizeRollingFileAppender
log4j.appender.RCFLog.File=runtime/logs/rcf.log
log4j.appender.RCFLog.DatePattern=yyyyMMdd'_'{0}
log4j.appender.RCFLog.Encoding=UTF-8
log4j.appender.RCFLog.Append=true
log4j.appender.ConsoleLog=org.apache.log4j.ConsoleAppender
log4j.appender.ConsoleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.ConsoleLog.layout.ConversionPattern=%p [%t] %c{1}: %m%n
log4j.appender.RCFLog.layout=org.apache.log4j.PatternLayout
log4j.appender.RCFLog.layout.ConversionPattern=@%d{yyyyMMdd HH:mm:ss.SSS}@ %p {%t} %c{1}: %m%n
log4j.logger.GUIEVT=INFO
観察によると、システムに日付の変更がありました。日付は、現在の日付の 3 か月前に設定されました。
Current Date- 10th May 2018
nextCheck - 11th May 2018 00:00
Changed Date- 10th March 2018
No backup is created as a condition at line 3 failed.
5 月 11 日の 12 時間後、日付は現在の日付に変更されました。その時までに、ファイルのタイムスタンプは 3 月 10 日に変更されました。RollOver がなかったため、次のチェックはまだ 2018 年 5 月 11 日 00:00 でした。しかし、5 月 12 日の 00:00 に、ファイルは 3 行目の条件に従ってロールオーバーされ、新しいファイルが作成されたはずですが、発生しませんでした。また、ファイルが最大サイズに達していました。それ以降、システムが再起動されるまでログはありませんでした。
Java のバージョンはjava8u162です。Javaに関連しているかどうかを示す投稿は見つかりませんでしたが。
同じシナリオをテスト環境で再現しようとしましたが、すべてが期待どおりに機能しています。
Log4jでこのような問題に直面した人はいますか? あなたの情報を共有してください。前もって感謝します。