gpt4 book ai didi

python - Python 的根记录器的名称是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:38 25 4
gpt4 key购买 nike

我正在学习有关 Python 日志记录的基本教程,https://docs.python.org/3/howto/logging.html#a-simple-example ,并按照 iPython 控制台中的步骤操作。如那里所述,根记录器的默认级别是 WARNING:

In [1]: import logging

In [2]: logging.warning('Watch out!')
WARNING:root:Watch out!

In [3]: logging.info('I told you so')

我想将根记录器的级别显式设置为 INFO。我尝试使用 name='root' 来做,但这没有明显的效果:

In [4]: logging.getLogger('root').setLevel(logging.INFO)

In [5]: logging.info('I told you so')

如果我不带参数调用 logging.getLogger(),我可以设置根记录器的级别:

In [6]: logging.getLogger().setLevel(logging.INFO)

In [7]: logging.info('I told you so')
INFO:root:I told you so

不过,我很好奇,为什么这在第一次时不起作用?这似乎应该有效,因为它的 name 属性是“root”:

In [12]: root_logger = logging.getLogger()

In [14]: root_logger.name
Out[14]: 'root'

简而言之,如果我不想依赖默认值,我应该将什么名称传递给 logging.getLogger() 以获取根记录器?

最佳答案

根记录器的名称是root,但您不能通过名称访问根记录器。

检查 logging.py揭示了这一点:

def __init__(self, root):
"""
Initialize the manager with the root node of the logger hierarchy.
"""
self.root = root
self.disable = 0
self.emittedNoHandlerWarning = 0
self.loggerDict = {}

rootloggerDict 分开存储,这是所有命名记录器所在的位置。

def getLogger(name=None):
"""
Return a logger with the specified name, creating it if necessary.
If no name is specified, return the root logger.
"""
if name:
return Logger.manager.getLogger(name)
else:
return root

可以按照manager.getLogger内部函数,发现找不到root:

def getLogger(self, name):
"""
Get a logger with the specified name (channel name), creating it
if it doesn't yet exist. If a PlaceHolder existed for the specified
name [i.e. the logger didn't exist but a child of it did], replace
it with the created logger and fix up the parent/child references
which pointed to the placeholder to now point to the logger.
"""
rv = None
_acquireLock()
try:
if self.loggerDict.has_key(name):
rv = self.loggerDict[name]
if isinstance(rv, PlaceHolder):
ph = rv
rv = _loggerClass(name)
rv.manager = self
self.loggerDict[name] = rv
self._fixupChildren(ph, rv)
self._fixupParents(rv)
else:
rv = _loggerClass(name)
rv.manager = self
self.loggerDict[name] = rv
self._fixupParents(rv)
finally:
_releaseLock()
return rv

关于python - Python 的根记录器的名称是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48712206/

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