gpt4 book ai didi

python - 如果先添加处理程序,为什么 Python 日志记录只隐藏 stdout?

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:53 24 4
gpt4 key购买 nike

如果我们在 Python 中将处理程序附加到根级记录器,我们在控制台中看不到任何输出:

import logging, logging.handlers, os

rootLogger = logging.getLogger('')
rootLogger.setLevel(logging.DEBUG)
rootLogger.addHandler(logging.NullHandler())
logging.info("We don't see this comment")

但是如果我们先调用日志记录,我们会在控制台中看到输出。我们甚至可以在添加处理程序后看到输出:

import logging, logging.handlers, os

rootLogger = logging.getLogger('')
rootLogger.setLevel(logging.DEBUG)
logging.info("We see this comment")
rootLogger.addHandler(logging.NullHandler())
logging.info("But we also see this comment")

这是为什么?

最佳答案

如果您自己不指定处理程序,则每当您进行日志记录调用时,Python 都会添加一个 StreamHandler。据推测,这是为了防止有人在使用开箱即用的日志记录模块时造成混淆。

这种行为就是为什么在第二个示例中,您有一个 StreamHandler 和一个 NullHandler 与根记录器相关联。您可以通过查看 .handlers 来了解这一点:

>>> rootLogger.handlers
[<logging.StreamHandler object at 0x1022a0650>, <logging.NullHandler object at 0x1022a0790>]

所以添加的 NullHandler 不会做任何事情,另一个 StreamHandler 会做一些事情,这就是为什么你会看到两条日志消息。在第一个示例中,您自己添加了一个处理程序,因此只有一个处理程序,一个 NullHandler,而 Python 不需要自己添加一个处理程序。

关于python - 如果先添加处理程序,为什么 Python 日志记录只隐藏 stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26767208/

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