zoukankan      html  css  js  c++  java
  • Log4j按级别输出日志到不同文件配置分析 (转:projava)

    关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的

    1. log4j.rootLogger=info,stdout,info,debug,error  
    2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    4. log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n  
    5.    
    6. log4j.logger.info=info  
    7. log4j.appender.info=org.apache.log4j.DailyRollingFileAppender  
    8. log4j.appender.info.layout=org.apache.log4j.PatternLayout  
    9. log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n  
    10. log4j.appender.info.datePattern='.'yyyy-MM-dd  
    11. log4j.appender.info.Threshold = INFO   
    12. log4j.appender.info.append=true  
    13. log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log  
    14.    
    15. log4j.logger.debug=debug  
    16. log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender  
    17. log4j.appender.debug.layout=org.apache.log4j.PatternLayout  
    18. log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n  
    19. log4j.appender.debug.datePattern='.'yyyy-MM-dd  
    20. log4j.appender.debug.Threshold = DEBUG   
    21. log4j.appender.debug.append=true  
    22. log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log  
    23.   
    24. log4j.logger.error=error  
    25. log4j.appender.error=org.apache.log4j.DailyRollingFileAppender  
    26. log4j.appender.error.layout=org.apache.log4j.PatternLayout  
    27. log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n  
    28. log4j.appender.error.datePattern='.'yyyy-MM-dd  
    29. log4j.appender.error.Threshold = ERROR   
    30. log4j.appender.error.append=true  
    31. log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log   


     

    而实际上这部分代码解决不了按照LOG4J的级别文件进行文件输出。

    配置中关键的配置说明是这一句:

    1. log4j.appender.debug.Threshold = INFO  


    而它的作用是输出INFO级别以上的内容到${webApp.root}/WEB-INF/logs/info.log中,所以info.log文件中包含了ERROR级别的文件。

    正确的解法是:

    定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明。

    源代码记载:

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


     

    重写 isAsSevereAsThreshold(Priority priority)方法

    1. public class LogAppender extends DailyRollingFileAppender {  
    2.    
    3.  @Override  
    4.  public boolean isAsSevereAsThreshold(Priority priority) {  
    5.   //只判断是否相等,而不判断优先级  
    6.   return this.getThreshold().equals(priority);  
    7.  }  
    8. }  


     

    这样,进行唯一判断,只有当Threshold与priority一致时,才进行输出,就实现了真正Log4j按照级别输出日志文件。

    在log4j.properties中,将配置文件作如下修改:

     

    1. log4j.logger.info=info  
    2. <span style="BACKGROUND-COLOR: #33cc00">log4j.appender.info=com.company.LogAppender  
    3. </span>log4j.appender.info.layout=org.apache.log4j.PatternLayout  
    4. log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n  
    5. log4j.appender.info.datePattern='.'yyyy-MM-dd  
    6. log4j.appender.info.Threshold = INFO   
    7. log4j.appender.info.append=true  
    8. log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log  



    到此,即完成了按照Log4j按照日志级别输出到不同文件中的功能。

  • 相关阅读:
    Hive的安装和建表
    在MarkDown中插入数学公式对照表(持续更新)
    Beta版本冲刺总汇
    a版本十日冲刺总汇
    “我们只是信息的搬运工”
    调查报告
    Beta版本冲刺第七天
    Beta版本冲刺第六天
    Beta版本冲刺第五天
    Beta版本冲刺第四天
  • 原文地址:https://www.cnblogs.com/hhg-2015/p/5381556.html
Copyright © 2011-2022 走看看