java中使用log4j 2(三)

2014-11-24 02:31:40 · 作者: · 浏览: 7
Test01 - debug 16:12:08.665 [main] DEBUG log4j2.Test01 - debug 16:12:08.665 [main] INFO log4j2.Test01 - info 16:12:08.665 [main] INFO log4j2.Test01 - info 16:12:08.665 [main] WARN log4j2.Test01 - warn 16:12:08.665 [main] WARN log4j2.Test01 - warn 16:12:08.666 [main] ERROR log4j2.Test01 - error 16:12:08.666 [main] ERROR log4j2.Test01 - error 16:12:08.666 [main] FATAL log4j2.Test01 - fatal 16:12:08.666 [main] FATAL log4j2.Test01 - fatal

可以看到Test01里的日志输出了两次

原来log4j 2的配置文件都有一个root logger,root logger的level为”error”,appender为”console”。如果配置文件中没有设置Test01 logger,那么Test01将使用root logger;如果配置文件中设置了Test01 logger,则Test01 logger(子logger)的appender先输出,但Test01 logger的事件还会传到root logger(父logger)的appender,然后再次输出。

为了避免重复输出,可以在Logger 标签下设置additivity为false,禁止子logger在父logger的appender里输出。修改后的log4j2.xml:


  

  
  
    
     
      
     
     
   
  
    
     
      
     
     
     
      
     
     
   

  

Output:

16:30:52.339 [main] TRACE log4j2.Test01 - trace
16:30:52.342 [main] DEBUG log4j2.Test01 - debug
16:30:52.342 [main] INFO  log4j2.Test01 - info
16:30:52.342 [main] WARN  log4j2.Test01 - warn
16:30:52.342 [main] ERROR log4j2.Test01 - error
16:30:52.342 [main] FATAL log4j2.Test01 - fatal

7. log4j 2可以定时检测配置文件的变化

通过设置monitorInterval属性,即可设置log4j 2自动检测配置文件的时间间隔(单位:秒),最小间隔为5秒。log4j 2检测到配置文件有变化,会重新配置自己。


  

  

  

8. Status

文中的配置文件的开头都有如下设置


  

status究竟有什么用处呢?

log4j 2定义的status级别有8个:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF

其实status属性是帮助开发者找错用的,它可以检测log4j 2的配置文件是否有错,也可以检测到死循环的logger

9.Layouts

Appenders标签内的PatternLayout标签控制log事件的输出格式

log4j 2官网的Layouts介绍:http://logging.apache.org/log4j/2.x/manual/layouts.html