本文共 2189 字,大约阅读时间需要 7 分钟。
我们在生产环境中面临一个问题,在某些情况下,日志文件不会被翻转。 我们将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这样的问题? 请分享您的意见。 提前致谢。
转载地址:http://icyzo.baihongyu.com/