【发布时间】:2010-06-11 14:39:28
【问题描述】:
为什么我的应用程序中的Log4j rootLogger 没有根据级别过滤日志事件?在我的log4j.properties 中,我有几个记录器:
log4j.rootLogger=info,stdout
log4j.logger.com.name.myapp=debug,myapp
log4j.logger.org.castor=debug,castor
log4j.logger.org.exolab.castor=debug,castor
log4j.logger.org.hibernate=debug,hibernate
log4j.logger.org.springframework=debug,spring
每个记录器都在DEBUG 及更高级别接收并记录大量日志事件,这是我所期望和希望的。然而,rootLogger 尽管设置为INFO 级别,但也会显示所有这些事件,包括DEBUG 事件,这不是我所期望的,也不是我想要的。相反,我希望它过滤DEBUG 事件,但只显示INFO 和更高级别的事件(WARN、ERROR 和FATAL),这也是我想要的。为什么 rootLogger 会显示所有事件?
【问题讨论】:
-
您已经为 com.name.myapp,org.castor,org.hibernate,org.springframework 提供了调试级别,所以对于这些 pkg,它会打印调试信息吗?
-
是的,这些级别打印调试事件。但是,rootLogger 打印所有事件,但我希望它只打印信息事件。
-
然后将级别更改为信息。
-
根记录器的阈值级别已经设置为
INFO。这就是我的观点。根记录器也接受调试事件。为什么? -
正如我在下面的回答中所讨论的,stackoverflow.com/questions/2453010/… 解释了为什么根记录器会捕获所有其他记录器的事件。