Log4j如何控制不同包的输入级别
我们在做web开发,会使用spring和hibernate等框架,日志记录会使用log4j,这是如果设置调试的级别为debug的话,spring和hibernate以及其他web项目中用到的框架的调试信息也会输出的日志文件或者控制台中(输出依赖于Log4J的日志配置),这样我们真正需要的调试信息就会淹没在框架的debug信息中,毕竟我们是在开发Web应用,而不是在调试框架,如何控制spring和hibernate等的调试级别呢?
这是个非常重要的功能.但是大部分介绍 Log4J的资料,尤其是中文资料,竟然都没有写这部分.这里介绍其方法。通过设置log4j的logger来控制。
log4j.rootLogger=INFO, stdout, logfile
细部控制如何控制。比如,想屏蔽Hibernate。那么这么设置。 og4j.logger.org.hibernate=FATAL
意思是,所有org.hibernate的子孙Logger都只显示符合 level >= FATAL 的信息。
小于 FATAL的信息,就不显示。
如果一个配置中有多个logger,他们之间会有什么关系呢?答案是,在输出上,他们没有任何关系,都是独立运作的,
不相关的,但是在配置上,父包的配置会传给子包,如果子包没有另外定义配置的话。
例如上面配置文件中的两个logger:
log4j.logger.com.wolfsquare
log4j.logger.com.wolfsquare.log2
这里认为 log4j.logger.com.wolfsquare.log2 继承自 log4j.logger.com.wolfsquare,他们的配置声明如下:
log4j.rootCategory=INFO, stdout, fileout
log4j.logger.com.wolfsquare.log2=,stdout
注意第二句没有指定输出级别,那么根据配置继承规则会继承父logger的配置,在这里就是INFO。
同时需要强调的是,如果两个logger有继承关系,且输出到同一个appender,根据输出独立原则,那么将会出现两行一样的信息,
例如上面的两个logger定义会导致这样的情况。