【发布时间】:2019-05-28 14:46:34
【问题描述】:
这是一个我觉得 logging 模块很奇怪的小例子:
import logging
logging.basicConfig()
#
# making a hierarchy like this:
# root
# |- session
# |-session.foo
#
root_logger = logging.getLogger()
session_logger = logging.getLogger("session")
foo_logger = logging.getLogger("session.foo")
#
# root_logger and session_logger effective log levels
# are set to 30 (= WARNING)
#
foo_logger.debug("WA") #nothing is printed, so far so good
#
# and now enters the problem...
#
foo_logger.setLevel(logging.DEBUG)
foo_logger.debug("HELLO") #HELLO log message is printed!!!
据我了解,我不明白为什么会打印“HELLO”日志消息
因为记录器foo_logger没有附加处理程序,所以日志消息应该
冒泡,并被更高级别的记录器(session)有效地阻止,
因为它的级别设置为WARNING(默认情况下)。
似乎在foo_logger 上设置级别赋予了它显示的权利
通过处理程序,但我不清楚。
有人可以向我解释为什么要打印该消息吗? 我应该怎么做才能拥有我想要的记录器层次结构?
【问题讨论】:
-
@DaduKhan 抱歉,但它没有帮助,因为您提供的链接与 Python 日志记录无关。我的问题不在于打印,而在于我无法理解记录器的层次结构和规则如何显示或不应用消息
-
foo_logger已从其父级继承其日志记录级别,然后您覆盖了该级别。 -
@Eqomatic 你能详细说明一下吗?
foo_logger没有处理程序。.propagate设置为True,所以我预计日志消息会冒泡到session记录器。并且消息不会显示... -
foo_logger也从其父级继承了处理程序,因为.propogate设置为True。
标签: python python-logging