如何检查记录器是否存在

新手上路,请多包涵

我不得不扩展现有的日志库以添加一些功能。其中之一是允许处理程序在不知道它是否存在的情况下侦听任何现有日志的功能。以下允许处理程序侦听,但不检查日志是否存在:

 def listen_to_log(target, handler):
    logging.getLogger(target).addHandler(handler)

问题是我不希望任何处理程序侦听未记录到的日志,并且想要引发 ValueError 如果日志尚不存在。理想情况下,我会执行以下操作:

 def listen_to_log(target, handler):
    if not logging.logExists(target):
        raise ValueError('Log not found')
    logging.getLogger(target).addHandler(handler)

到目前为止,我一直无法找到像 logging.logExists 这样的功能,是否有这样的功能或方便的解决方法?

原文由 shayaan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 496
2 个回答

适用于我和你的解决方法:

当您为自己的代码创建一个记录器时,您几乎肯定会创建一个带有处理程序(文件处理程序和/或控制台处理程序)的记录器。当您尚未创建记录器并且通过以下方式获得“根”记录器时

logger = logging.getLogger()

那么这个记录器还没有处理程序。因此,我总是检查上面的记录器是否会产生一个具有处理程序的记录器

logging.getLogger().hasHandlers()

因此,仅当根记录器没有处理程序时,我才创建一个记录器:

 logger = <create_my_logger> if not logging.getLogger().hasHandlers() else logging.getLogger()

“create_my_logger”片段代表我的代码/函数,它返回一个记录器(带有处理程序)。

原文由 Max Quant 发布,翻译遵循 CC BY-SA 4.0 许可协议

警告。这没有记录。它可能会更改,恕不另行通知。

日志记录模块在内部使用单个 Manager 对象将记录器的层次结构保存在可访问的字典中:

 import logging
logging.Logger.manager.loggerDict

除根记录器之外的 所有记录器都以其名称存储在该字典中。

网上有几个例子:http: //code.activestate.com/lists/python-list/621740/https://michaelgoerz.net/notes/use-of-the-logging-module-in-python .html (使用 Python 2 打印)

原文由 VPfB 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题