如何使用 python.log 模块列出所有现有的日志记录器

在 Python 中有没有获得所有已定义日志记录器的列表的方法?

我的意思是,是否存在像 logging.getAllLoggers()这样返回 Logger对象列表的东西?

我搜索了 python 日志文档,但找不到这样的方法。

46141 次浏览

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

import logging


loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]

调用 getLogger(name)可以确保将由 loggerDict持有的任何占位符日志记录器添加到列表时完全初始化。

如果您还想将 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上测试

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

import logging_tree


logging_tree.printout()

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

logging_tree.tree()

有关更多信息,请参见 https://pypi.org/project/logging_tree/