日期:2014-05-20  浏览次数:20681 次

log4j用DailyRollingFileAppender每半天切换一个文件,切换了,还是在写老日志文件
最近发现很奇怪的现象,Log4j我设置如下
log4j.rootLogger=ERROR,stdout
log4j.logger.NoModule=INFO,file_NM
log4j.logger.infos=INFO,infos
log4j.logger.error=INFO,error

log4j.appender.infos=org.apache.log4j.DailyRollingFileAppender
log4j.appender.infos.File=${WORKDIR}/logs/infos.log 
log4j.appender.infos.DatePattern='.'yyyy-MM-dd-a
log4j.appender.infos.layout=org.apache.log4j.PatternLayout
log4j.appender.infos.layout.ConversionPattern=%-5r [%t][%d{ISO8601}]-[%5p]%x-[%m]%n 

没半天切换一个文件,但是发现在中午12点的时候切换,下午12点过后,一直在写上午的那个日志文件.
Log4j版本是log4j-1.2.11.jar
JDK版本是:
java version "1.6.0_07"
Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)
Diablo Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
运行系统是:
FreeBSD noticeserverpri.cqrcb.com 7.1-RELEASE FreeBSD 7.1-RELEASE 
#1: Thu Mar 12 08:28:35 CST 2009  
root@smsserver.develop.cqrcb.com:/usr/src/sys/i386/compile/RS i386


------解决方案--------------------
感觉你的配置没有什么问题....应该是你说的效果才对to be rolled at midday and midnight
Java code

public static void main(String[] args) throws Exception {
        DailyRollingFileAppender appender=new DailyRollingFileAppender(null,"e:\\test.login","'.'yyyy-MM-dd-a");
        Method method=DailyRollingFileAppender.class.getDeclaredMethod("computeCheckPeriod", new Class[]{});
        method.setAccessible(true);
        System.out.println(method.invoke(appender, null));
        method=DailyRollingFileAppender.class.getDeclaredMethod("rollOver", new Class[]{});
        method.setAccessible(true);
        method.invoke(appender, null);    
    }

------解决方案--------------------
你是不是有多个进程在运行?用同一个log4j.xml?
------解决方案--------------------
给个小的提示,也许有用。
如果到切换时间点的时候,服务器仍然正常运行,log应该会写到新文件里面。
如果这期间重启服务,再跑程序,那么程序仍然会写到原来的文件里面。