如何使用 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 模块列出所有现有的记录器的主要内容,如果未能解决你的问题,请参考以下文章

Python logging 模块

python logging模块

Python logging模块使用配置文件记录日志

Python–logging模块知多少

Python logging模块

python logging模块使用简介