LOG4J坑

log4J按时间切割文件并不是没个小时自动切割,而是在接受到数据才进行判断是否切割。
所以要按小时进行切割文件的时候,要自己定时发送一条数据。但是自己发送数据,即使发送null,log4J的RollingFileAppender也会写进去。
所以要对这个RollingFileAppender进行改写,把null消息忽略。

protected void subAppend(LoggingEvent event) {
    long n = System.currentTimeMillis();
    if (n >= nextCheck) {
      now.setTime(n);
      nextCheck = rc.getNextCheckMillis(now);
      try {
	rollOver();
      }
      catch(IOException ioe) {
	LogLog.error("rollOver() failed.", ioe);
      }
    }
    if(event.getMessage() == null)
    	return;
    super.subAppend(event);
   }

上面代码只是加多了一个null的判断,这样接收到null的时候,不会写入文件,并且会进行切割判断。

log4J不是进程安全,但是是线程安全的。


发表评论