2013-01-16 42 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

相關問題