2014-01-19 58 views
1

設置:Python 3.3Python記錄器不尊重日誌級別

我有一個單元測試程序,我想打印出日誌消息。即使將日誌嚴重性設置爲INFO,Python也不會通過此記錄器打印除WARNING或更高郵件以外的任何內容。

這裏是我使用的代碼:

test_logger = logging.getLogger('DesktopprTester') 
print(test_logger.getEffectiveLevel()) 
test_logger.setLevel(logging.INFO) 
print(test_logger.getEffectiveLevel()) 
test_logger.warning('WARN') 
test_logger.info('INFO') 

這裏是輸出:

30 <-30 is WARN 
20 <-20 is INFO 
WARN 

它不打印信息。所以我錯過了這個文件中的所有信息...我不知道爲什麼。該文件似乎與我同意。當我使用根記錄器並將級別設置爲info時,它將打印它(以及所有其他所做的事情)。現在我製作了自己的記錄器,但似乎並不奏效。請注意,WARNING級別的消息仍然出現,但它們不是我想看到的。

有什麼我在這裏失蹤?我覺得有一些明顯的答案,我沒有看到...

回答

1

雖然在Python 2中運行你的代碼,你會得到一個明確的警告:

No handlers could be found for logger "DesktopprTester" 

所以,你只需要一個處理程序添加到您的記錄:

test_logger = logging.getLogger('DesktopprTester') 
hdlr = logging.StreamHandler() 
test_logger.addHandler(hdlr) 

警告將不會出現在蟒蛇3 - 我不知道爲什麼

+0

問題解決了。這些文件並沒有太明顯。我明白他們有處理程序,但它使它看起來像重定向到文件或網絡流。謝謝。 – Mgamerz

+0

@Mgamerz的確是它們的目的(至少在unix中,stdin和stdout可以被認爲是「文件」)。 [文檔中的示例](http://docs.python.org/2/howto/logging.html#configuring-logging)確實使用了一個處理程序,但不幸的是'logging'不提供'StreamHandler'在記錄器上默認情況下(就像它在模塊上那樣) – goncalopp