如何使用python.logging模块获取所有现有记录器的列表

mis*_*iru 26 python logging python-3.x

有没有办法在python中获取列表所有已定义的记录器?
我的意思是,是否存在可以使用的东西,logging.getAllLoggers()哪些会返回Logger对象列表?

我搜索了python.logging文档,但找不到这样的方法.

先感谢您.

Wil*_*ing 49

记录器由logging.Manager实例保存在层次结构中.您可以manager在根记录器上查询 它知道的记录器.

import logging

loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
Run Code Online (Sandbox Code Playgroud)

  • 实际上,获取每个名称的Logger字典比仅列出Logger列表要好,所以`logging.root.manager.loggerDict`正是我要搜索的,谢谢! (7认同)
  • 这里需要注意的一点是,此片段未返回root记录器。 (5认同)

Jon*_*n L 18

如果您还想在列表中包含 RootLogger,请执行类似以下操作:

import logging
loggers = [logging.getLogger()]  # get the root logger
loggers = loggers + [logging.getLogger(name) for name in logging.root.manager.loggerDict]
Run Code Online (Sandbox Code Playgroud)

在 Python 3.7.4 上测试

  • 这就是为我解决的问题:丢失的根记录器是我遇到的所有问题的根源。 (2认同)

ste*_*mer 12

如果您尝试检查日志记录对象的层次结构,我建议使用logging_tree.printout()

import logging_tree

logging_tree.printout()
Run Code Online (Sandbox Code Playgroud)

或者,如果您想让您的代码可以访问日志记录树:

logging_tree.tree()
Run Code Online (Sandbox Code Playgroud)

请参阅https://pypi.org/project/logging_tree/了解更多信息。

  • 我更愿意在不依赖第三方库的情况下完成此操作,但谢谢您的链接:) (3认同)