2016-12-06 37 views
1

我開始探索Python 3.5logging包。我設置在main文件爲什麼我會收到「不需要的」日誌條目?

import logging 
logging.basicConfig(filename=r'fractal.log', level=logging.DEBUG) 

記錄了這兩個命令另外我在另一個模塊中插入

import logging 

。 所有我需要的日誌條目在日誌文件中顯示正確,但除了那些我有這兩個,這些都沒有AFAIK我的日誌代碼生成:

DEBUG:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): ichart.finance.yahoo.com 
DEBUG:requests.packages.urllib3.connectionpool:http://ichart.finance.yahoo.com:80 "GET /table.csv?d=11&b=1&e=6&s=%5EIRX&g=d&c=1900&a=0&f=2016&ignore=.csv HTTP/1.1" 200 None 

中顯然不是在產生這些日誌條目main模塊。另外,當我將日誌記錄級別設置爲INFO時,它們不會顯示出來。

有誰知道我爲什麼得到這些日誌條目?他們證明我的代碼有問題嗎?

+0

看看有什麼記錄;它非常具體。你似乎有代碼運行,查詢雅虎財務信息。 – Carcigenicate

回答

4

這是因爲你設置根記錄的水平,和requests模塊代表所有記錄到它。您可以通過顯式關閉requests記錄器解決這個問題:

logging.getLogger('requests').setLevel(logging.ERROR) 

這會沉默從requests所有DEBUG -level消息。


另外,您可以使用,而不是依賴於根記錄自己記錄儀,有多種方法可以做到這一點(如logging.config.dictConfig可以使用),但你可以很容易地手動做到這一點,沿着線的東西:

import logging 
logger = logging.getLogger(__name__) 

logger.addHandler(logging.FileHandler('fractal.log')) 
logger.setLevel(logging.DEBUG) 
+0

謝謝!第一個解決方案完美工作,第二個解決方案在創建記錄器對象的主模塊中工作。其他模塊不知道主模塊中創建的記錄器對象的存在。我需要在每個要執行代碼的模塊中添加相同的三行嗎? – Soldalma

+0

@Soldalma這取決於你如何處理伐木工。你通常要做'導入日誌; logger = logging.getLogger(__ name __)',並使用'logger.debug'或'logger.info'。您應該*不*設置模塊內部的任何處理程序(通常),而只在主文件中定義處理程序(例如,實際運行代碼的腳本)。請參閱'logging'模塊的文檔,有一個「食譜」部分解釋了「標準用例」。 – Bakuriu

+0

再次感謝。我不得不將所有三個命令添加到每個模塊以使其工作。但後來我在運行窗口中得到了不需要的紅色條目,重複那些通過非主要模塊中的代碼記錄到文件中的項目。如果沒有setLevel命令,則不記錄任何內容,並且沒有addHandler命令日誌記錄僅顯示在屏幕上。我會看看食譜。 – Soldalma

相關問題