Log4J的rootLogger的理解

1 rootLogger
  总是存在一个rootLogger,即使没有显示配置也是存在的,并且默认输出级别为DEBUG
  所有其他的Logger都默认继承自rootLogger
2 自定义的Logger(子Loggger)继承自rootLogger
  格式如下:
 
引用
log4j.logger.A.B.C

  这样定义后其实建立了3个logger实例,它们分别是"A"、"A.B"、"A.B.C"。每次我们在系统中取得logger时,并不是新建实例,这些实例是系统启动的时候就按照配置文件初始化好的(也可能时第一次引用的时候建立的,然后缓存其实例供以后使用,这部分还没有时间研究)。

调用:
  Logger logger = Logger.getLogger("A.B")
3 限制appender叠加性
例1:
引用
log4j.rootLogger=DEBUG, Console
log4j.logger.A=DEBUG, Console
log4j.logger.A.B=INFO, Console

对于logger A.B输出的任何日志会往控制台输出三次,原因是A.B继承A的以及A的父logger的所有appender,
这种继承关系仅仅是把父logger的appender添加到自己的appender列表中,父logger的输出level不会影响
子logger的输出。

例2:限制appender叠加
引用
log4j.rootLogger=DEBUG, Console
log4j.logger.A=DEBUG, Console
log4j.logger.A.B=INFO, Console
log4j.additivity.A.B=false

logger A.B的日志仅会输出到自己Console中,不会继承任何父logger的appender。

完整的配置如下:

log4j.rootLogger=DEBUG,Console,RollingFile

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n

#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=../logs/mylogger.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#log4j.logger.java.sql=DEBUG
#自定义的 Xconsole
log4j.logger.sd.liveker=ERROR,Xconsole
#不继承父类的定义
log4j.additivity.sd.liveker=false

#Xconsole
log4j.appender.Xconsole=org.apache.log4j.ConsoleAppender
log4j.appender.Xconsole.layout=org.apache.log4j.PatternLayout
log4j.appender.Xconsole.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n





4 控制appender的输出级别
若想对输出到appender中的日志级别进行限制的话,就需要用到threshold来控制。
log4j.threshold=ERROR 用来控制所有的appender,即输出到所有appender的日志,
不管原来是什么级别的,都不能低于threshold所规定的级别。

log4j.appender.Console.threshold=ERROR 用来控制指定的appender的输出级别。

参考:
http://www.cnblogs.com/Fskjb/archive/2011/01/29/1947592.html

猜你喜欢

转载自zjw2016.iteye.com/blog/2328620