2012-08-04 101 views
4

所以我在命令行中運行蟒下面的代碼:爲什麼我沒有在Python中接收日誌INFO消息?

import logging 

rootLog = logging.getLogger(__name__) 
rootLog.setLevel(logging.INFO) 
rootLog.warning("This is a root warning") 
rootLog.info("This is root info") 
def info(): 
    log = rootLog.getChild("info") 
    log.info("This is info") 
    log.warning("This is a warning") 
info()  

我期待看到在控制檯上所有四個日誌消息,但我只看到了警告。到底是怎麼回事?我誤解了什麼嗎?

編輯:

我發現通過在腳本,我會得到我的預期輸出的開頭添加logging.basicConfig()。這是奇怪的,因爲伐木蟒蛇文檔指出:

功能debug()info()warning()error()critical()會自動調用basicConfig()如果沒有處理程序的根記錄定義。

+0

你有什麼處理?如果內存服務,處理程序也可以按日誌級別過濾。 – 2012-08-04 02:26:55

+0

上面的代碼是唯一運行的代碼,所以我猜沒有。儘管看到我的編輯。 – Retsam 2012-08-04 03:09:49

+0

只是一個參考,你確實知道,嚴格來說,你的'rootLogger'不是真正的根記錄器,對吧? – 2012-08-04 03:28:00

回答

3

您從手動引用該位Module-Level Functions下,並只適用於模塊功能

logging.debug() 

字面上叫。由於您使用rootLog.info()調用實例方法,因此basicConfig沒有被調用,您可能正在與空記錄器進行交談。這裏的文檔有點令人困惑。

使用loggging.basicConfig()和事情應該工作。

3

好的,我通過日誌記錄模塊中的代碼挖掘出來,我想我至少有部分想到了。你所看到的情況正在發生,因爲你所稱的rootLogger實際上並不是根記錄器。確實,如果直接在logging上調用某個日誌方法時沒有將處理程序添加到根日誌記錄程序(真實根日誌記錄程序),則它會調用basicConfig,但您正在對Logger實例調用日誌方法這裏根本不叫basicConfig。無論如何,這在這種情況下實際上是不相關的。 :)我不確定這裏調用的處理函數是在哪裏創建的,但我幾乎可以保證它連接到真正的根記錄器。真正的根記錄器默認初始化爲WARNING。嘗試做logging.root.setLevel(logging.INFO),看看你是否得到你所期望的。如果您手動將記錄器附加到您的rootLogger上,您還應該看到您想要的內容。

相關問題