如何使用 python.logging 模块列出所有现有的记录器
Posted
技术标签:
【中文标题】如何使用 python.logging 模块列出所有现有的记录器【英文标题】:How to list all existing loggers using python.logging module 【发布时间】:2019-04-14 09:57:38 【问题描述】:有没有办法在 Python 中获取所有已定义记录器的列表?
我的意思是,是否存在诸如 logging.getAllLoggers()
之类的会返回 Logger
对象列表的东西?
我搜索了 python.logging 文档但找不到这样的方法。
提前谢谢你。
【问题讨论】:
【参考方案1】:记录器由logging.Manager
实例保存在层次结构中。您可以在根 logger 上查询 manager
以获取它知道的 logger。
import logging
loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
调用getLogger(name)
可确保loggerDict
持有的任何占位符记录器在添加到列表时完全初始化。
【讨论】:
事实上,获取每个名称的 Logger 字典比仅列出 Logger 更好,所以logging.root.manager.loggerDict
正是我要寻找的,谢谢!
这里有个小提示,这个sn-p不会返回root logger。
任何人都可以解释为什么 PyCharm 的 linting 会警告这个 sn-p:Unresolved attribute reference 'manager' for class 'RootLogger'
?我知道它可以很容易地被禁用,但仍然......【参考方案2】:
如果您还想在列表中包含 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 上测试
【讨论】:
以上是关于如何使用 python.logging 模块列出所有现有的记录器的主要内容,如果未能解决你的问题,请参考以下文章