在没有记录器实例的情况下向Python日志记录模块添加自定义处

时间:2013-01-16 21:08:42

标签: python logging

这是How to get non-blocking/real-time behavior from Python logging module? (output to PyQt QTextBrowser)提供的答案X.Jacobs的后续问题。

在Python日志记录模块中,添加自定义处理程序的常规方法是定义一个继承自logging.Handler的处理程序类(我们称之为CustomLogHandler)。要将其附加到logging流程,我们通常会这样做:

import logging

class CustomLogHandler(logging.Handler):
    ... (some code here)...

logger = logging.getLogger()
logger.addHandler(CustomLogHandler)

其中addHandlerlogger实例的方法。

问题:假设我们没有希望获得logger(即我们不希望执行此操作以上)。是否可以将CustomLogHandler附加到logging本身?

有关背景信息,请参阅How to get non-blocking/real-time behavior from Python logging module? (output to PyQt QTextBrowser)中的评论。

前提是可以使用自定义处理程序而无需引用logger实例。

1 个答案:

答案 0 :(得分:5)

logging.getLogger()返回根记录器实例,该对象没有进一步的'up',并且没有 else 将处理程序附加到之外根。

logging.error()这样的模块级函数使用根记录器;引自documentation

  

logging.error(msg[, *args[, **kwargs]])
   在根记录器上记录级别为ERROR的消息。参数解释为debug()。

换句话说,像logging.error()这样的功能只需拨打getLogger().error()

CustomLogHandler附加到根记录器是将其添加到模块的正确方法。