gpt4 book ai didi

java - 为什么 Log4j rootLogger 不根据事件级别过滤日志事件?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:08 24 4
gpt4 key购买 nike

为什么是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 和更高级别的事件(WARNERROR FATAL),这也是我想要的。为什么 rootLogger 显示所有事件?

最佳答案

查看此 answer类似question关于 Log4j 中的记录器链接:

The way Log4j chaining works is a bit counter intuitive (to me at least). If the request level is equal to or above the threshold of the most specific matching logger, it is accepted. Once the request is accepted, it gets handled by the complete chain of ancestors regardless of their thresholds!

这意味着无论您将根记录器的阈值设置到什么级别,它总是会接受并输出任何其他记录器接受的日志事件,除非您禁用该子记录器的链接或明确设置其阈值附加到更高级别。

因此,在这种情况下,有两种方法可以防止根记录器从其他记录器捕获事件。第一种是更有选择性的禁用日志事件链的方法:

log4j.additivity.com.name.myapp=false
log4j.additivity.org.castor=false
log4j.additivity.org.exolab.castor=false
log4j.additivity.org.hibernate=false
log4j.additivity.org.springframework=false

第二种方法更简单,但限制更多,因为它抑制了控制台上低于 INFO 的所有事件(DEBUGTRACE ):

log4j.appender.stdout.Threshold=info

关于java - 为什么 Log4j rootLogger 不根据事件级别过滤日志事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3023690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com