2016-08-21 38 views
2

我在Python3交互提示創建一個記錄:Python的記錄不符合設定的水平

>>> import logging 
>>> logger = logging.getLogger('foo') 
>>> logger.setLevel(logging.INFO) 
>>> logger.warn('bar') 
bar 
>>> logger.info('bar') 
>>> 

我期望logger.info輸出bar在這種情況下,因爲我已經明確地設置日誌級別。但情況並非如此。爲什麼?

+1

請註明您所使用的Python版本或明確你問兩個版本。 – buhtz

回答

1

實際上,在你的情況下,既然你沒有配置日誌記錄功能,也不應該輸出任何東西。你需要運行logging.basicConfig()或處理程序添加到您的記錄,以期望的任何輸出:

In [1]: import logging 

In [2]: logger = logging.getLogger('foo') 

In [3]: logger.setLevel(logging.INFO) 

In [4]: logger.warn('foo') 
No handlers could be found for logger "foo" 

In [5]: logger.info('foo') 

In [6]: logging.basicConfig() 

In [7]: logger.info('foo') 
INFO:foo:foo 

In [8]: logger.warn('foo') 
WARNING:foo:foo 

正如在評論中提到通過larsks,在Python 3日誌默認配置與WARNING水平(這意味着你」如果您默認使用warning()或更高級別,則會得到輸出)。在你的情況,你要麼可以調用logging.basicConfig()到默認處理程序添加到所有記錄在上面的例子中,或處理程序添加到您的記錄:

logger.addHandler(logging.StreamHandler()) 
+3

你的第一句話只對Python 2是正確的。在Python 3中,即使不調用'basicConfig',你也將在控制檯上得到'WARNING'和以上的日誌消息輸出。 – larsks

+1

我相信'logger.addHandler(logging.StreamHandler())'也可以。 (或者你可以添加一個自定義處理程序來做你想做的任何事情。) – smarx

+0

確實,答案修正 – sirfz