我正在看这篇文章:https://docs.python.org/3.7/howto/logging.html#logging-basic-tutorial
该段:
记录器层次结构的根称为根记录器。那是 函数debug(),info(),warning(),error()使用的记录器 和critical(),它们仅调用根的同名方法 记录器。函数和方法具有相同的签名。的 root记录器的名称在记录的输出中显示为“ root”。
我很困惑,因为一旦使用logger = logging.getLogger(__name__)
创建记录器并使用logger.info/debug/etc。,模块的名称应该被打印而不是root。为什么该段说:“ ...仅调用根记录器的同名方法”
答案 0 :(得分:3)
措辞很重要。
[...]这就是函数所使用的记录器,它们只调用同名方法的debug(),info(),warning(),error()和critical()。根记录器。 [...]
该段引用了模块级实用程序功能debug()
,info()
,warning()
,error()
和critical()
。实际上,它们全部都在根记录器上运行,例如:
def debug(msg, *args, **kwargs):
"""
Log a message with severity 'DEBUG' on the root logger. If the logger has
no handlers, call basicConfig() to add a console handler with a pre-defined
format.
"""
if len(root.handlers) == 0:
basicConfig()
root.debug(msg, *args, **kwargs)
这些模块级功能可以在documentation中找到。
当然,当通过logging.getLogger(__name__)
创建自己的记录器并在该实例上调用各自的方法时,您将对记录器进行操作,而不是根操作(除非明确禁用,否则仍然会传播)。
编辑:
我刚刚意识到,这个问题以及您以前的问题已经George's excellent, in-depth reply回答了您稍早的问题。我强烈建议您仔细阅读。