这是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)
其中addHandler
是logger
实例的方法。
问题:假设我们没有希望获得logger
(即我们不希望执行此操作以上)。是否可以将CustomLogHandler
附加到logging
本身?
有关背景信息,请参阅How to get non-blocking/real-time behavior from Python logging module? (output to PyQt QTextBrowser)中的评论。
前提是可以使用自定义处理程序而无需引用logger
实例。
答案 0 :(得分:5)
logging.getLogger()
返回根记录器实例,该对象没有进一步的'up',并且没有 else 将处理程序附加到之外根。
像logging.error()
这样的模块级函数使用根记录器;引自documentation:
logging.error(msg[, *args[, **kwargs]])
在根记录器上记录级别为ERROR的消息。参数解释为debug()。
换句话说,像logging.error()
这样的功能只需拨打getLogger().error()
。
将CustomLogHandler
附加到根记录器是将其添加到模块的正确方法。