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不是进程安全,但是是线程安全的。