2013-01-16 41 views
0

这是由X.Jacobs提供的答案How to get non-blocking/real-time behavior from Python logging module? (output to PyQt QTextBrowser)的后续问题。将自定义处理程序添加到没有记录器实例的Python记录模块中?

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

import logging 

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

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

其中addHandlerlogger实例的方法。

问题:假设我们没有想得到logger(即我们不想上面做的)。是否可以附加CustomLogHandlerlogging本身?

有关上下文的信息,请参阅How to get non-blocking/real-time behavior from Python logging module? (output to PyQt QTextBrowser)中的注释。

前提是可以使用自定义处理程序,而不必参考logger实例。

+0

当你将'CustomLogHandler'附加到'logging'本身'时,你期望发生什么? –

+0

我期待使用'logging.error()'而不是'logger.error()'。 – Gilead

+0

我不确定为什么这会被downvoted(无论它是谁) - 这个问题是合理的。给出的答案也是正确的。 – Gilead

回答

5

logging.getLogger()返回根记录器实例,没有进一步的“向上”从该对象,并没有什么别的处理程序重视超越了根。

模块级功能如logging.error()使用根记录器;从documentation引述:

logging.error(msg[, *args[, **kwargs]])
日志与根记录器电平错误的消息。参数解释为debug()。

换句话说,像logging.error()这样的功能只是简单地调用getLogger().error()

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

+0

我刚刚在文档中看到可以这样做:'logging.getlogger('')。addHandler(CustomLogHandler)'。这是我需要的答案。谢谢! – Gilead

+0

@Gilead:你不必使用名字;它是可选的;空字符串与没有传入名字相同。 –

+0

谢谢。我的想法很多 - 我只是复制并粘贴了文档中的内容。 – Gilead

相关问题