可以看到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