【发布时间】:2019-04-14 09:57:38
【问题描述】:
有没有办法在 Python 中获取所有已定义记录器的列表?
我的意思是,是否存在诸如 logging.getAllLoggers() 之类的会返回 Logger 对象列表的东西?
我搜索了 python.logging 文档但找不到这样的方法。
提前谢谢你。
【问题讨论】:
标签: python python-3.x logging
有没有办法在 Python 中获取所有已定义记录器的列表?
我的意思是,是否存在诸如 logging.getAllLoggers() 之类的会返回 Logger 对象列表的东西?
我搜索了 python.logging 文档但找不到这样的方法。
提前谢谢你。
【问题讨论】:
标签: python python-3.x logging
记录器由logging.Manager 实例保存在层次结构中。您可以在根 logger 上查询 manager 以获取它知道的 logger。
import logging
loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
调用getLogger(name) 可确保loggerDict 持有的任何占位符记录器在添加到列表时完全初始化。
【讨论】:
logging.root.manager.loggerDict 正是我要寻找的,谢谢!
Unresolved attribute reference 'manager' for class 'RootLogger'?我知道它可以很容易地被禁用,但仍然......
如果您还想在列表中包含 RootLogger,请执行以下操作:
import logging
loggers = [logging.getLogger()] # get the root logger
loggers = loggers + [logging.getLogger(name) for name in logging.root.manager.loggerDict]
在 Python 3.7.4 上测试
【讨论】: