log4j

参考1

参考2

 

### set log levels ###    
log4j.rootLogger=info,error,info  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender     
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout     
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n     
      
log4j.logger.info=info  
log4j.appender.info=com.zznode.log.MyAppender    
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.info.datePattern='.'yyyy-MM-dd     
log4j.appender.info.Threshold = INFO   
log4j.appender.info.append=false   
log4j.appender.info.File=D:/log4j/info.log   
 
 
log4j.logger.error=error  
log4j.appender.error=com.zznode.log.MyAppender     
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n   
log4j.appender.error.datePattern='.'yyyy-MM-dd     
log4j.appender.error.Threshold = ERROR     
log4j.appender.error.append=false   
log4j.appender.error.File=D:/log4j/error.log

 

info.log里面也包含了error的输出。

配置中关键的配置说明是这一句:
log4j.appender.debug.Threshold = INFO 
而它的作用是输出INFO级别以上的内容到info.log中,所以info.log文件中包含了ERROR级别的文件。


解决办法是:定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明(重写针对级别的比较方法)

源代码

   public boolean isAsSevereAsThreshold(Priority priority)  {    
         return threshold == null || priority.isGreaterOrEqual(threshold);    
    } 

重写 isAsSevereAsThreshold(Priority priority)方法

 public class MyAppender extends DailyRollingFileAppender {  
      
    @Override  
    public boolean isAsSevereAsThreshold(Priority priority) {    
          //只判断是否相等,而不判断优先级     
        return this.getThreshold().equals(priority);    
    }    
}   

posted @ 2017-03-14 22:16  Cao_Yeung  阅读(143)  评论(0编辑  收藏  举报