【问题标题】:How to list all existing loggers using python.logging module如何使用 python.logging 模块列出所有现有的记录器
【发布时间】:2019-04-14 09:57:38
【问题描述】:

有没有办法在 Python 中获取所有已定义记录器的列表?

我的意思是,是否存在诸如 logging.getAllLoggers() 之类的会返回 Logger 对象列表的东西?

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

提前谢谢你。

【问题讨论】:

    标签: python python-3.x 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 上测试

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      相关资源
      最近更新 更多