2016-02-28 46 views
5

從Python 3.2開始,logging.Logger.setLevel接受字符串級別,例如'INFO'而不是相應的整數常量。這非常方便,除非您無法以數字方式比較級別,並且大多數其他日誌記錄方法僅接受整數。如何使用logging包提供的功能將級別字符串轉換爲數字級別?具體來說,我希望這樣做:如何將python日誌記錄級別名稱轉換爲整數代碼

>>> logging.???('INFO') == logging.INFO 
True 

回答

7

如何使用類似

$ python 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import logging 
>>> getattr(logging, 'INFO') 
20 
>>> getattr(logging, 'DEBUG') 
10 
>>> getattr(logging, 'ERROR') 
40 
>>> 
+0

這正是我正在尋找的。查詢而不修改任何記錄器的狀態。 –

2

.level返回記錄事件的數值級別。

演示:

>>> logger = logging.getLogger() 
>>> logger.setLevel('INFO') 
>>> logger.level == logging.INFO 
True 
+1

這是非常有用的,並回答我的字面問題。但是,我希望能夠在不設置日誌級別的情況下獲取號碼。 –

2

有一對夫婦的logging模塊,使該功能在屬性。它們的前綴是下劃線,意味着隱私,所以使用它們不是一個好主意。但是:

在最高級別,有_checkLevel,這需要的水平是字符串或整數,或者返回相應現有水平或提出了一個ValueError

_checkLevel包裝字典_nameToLevel,其中包含所有已註冊的等級(並由addLevelName更新)。

還有一個名爲_levelToName的成員,它包含反向映射。它可以通過getLevelName方法公開訪問。