2009-12-31 95 views
55

如果我設置日誌模塊的命令行參數是這樣來調試:確定Python日誌記錄器是否設置爲DEBUG級別?

if (opt["log"] == "debug"): 
    logging.basicConfig(level=logging.DEBUG) 

我怎麼能以後告訴如果記錄器設置爲DEBUG?如果True標誌被傳遞給它,並且如果沒有給出標誌,它會默認 在根記錄器被設置爲DEBUG時打印定時信息,所以我正在編寫一個裝飾器 。

+0

你最終還是會希望使用特定的,而不是這個耦合到記錄一些東西,比如選擇[「time_functions」](根據其他選項,您可能會默認爲True/False)。 – 2010-01-01 00:19:25

回答

69
logging.getLogger().getEffectiveLevel() 

logging.getLogger()無參數獲取根級記錄器。

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel

+0

非常好,謝謝!我正在做類似的事情(除了向getLogger傳遞顯式的「root」),但是我在裝飾器的__init__函數中,在記錄器設置爲調試之前執行了此操作:\ – 2009-12-31 23:40:08

+1

如果您想要level的名稱,而不是數字,你可以使用它將數字轉換爲一個字符串(如'INFO'):logging.getLevelName() – guettli 2017-07-13 10:09:20

57

其實,有一個更好的:使用代碼logging.getLogger().isEnabledFor(logging.DEBUG)。我在嘗試瞭解如何處理getEffectiveLevel()的結果時發現它。 :-)

(下面是日誌模塊本身使用的代碼的圖像。)

logging code

+0

這應該是公認的答案,因爲它具有相同的事情,運行時複雜度較低。 – AndyJost 2017-09-21 16:57:25

相關問題