2013-01-18 239 views
13

瞭解Python日誌語句的存儲位置的方法是什麼?Python日誌記錄 - 檢查日誌文件的位置?

也就是說,如果我做的:

import logging 
log = logging.getLogger(__name__) 
log.info('Test') 

我在哪裏能找到的日誌文件?另外,當我打電話時:

logging.getLogger(__name__) 

這是否與記錄器的行爲/保存方式有關?

回答

12

logging模塊使用連接到記錄器的處理程序來決定如何,在何處,甚至是最終如何存儲或顯示消息。您也可以將logging默認配置爲寫入文件。您應該確實閱讀docs,但如果您致電logging.basicConfig(filename=log_file_name),其中log_file_name是要寫入消息的文件的名稱(請注意,必須在調用logging的其他任何內容之前執行此操作),則所有消息記錄到所有消息記錄器(除非稍後進行一些進一步的重新配置)將被寫入那裏。請注意記錄器設置的級別;如果內存提供服務,info低於默認日誌級別,所以您必須在basicConfig的參數中包含level=logging.INFO以及您的消息最終在文件中。

至於您的問題的其他部分,logging.getLogger(some_string)返回一個Logger對象,插入到根記錄器的層次結構中的正確位置,名稱的值爲some_string。不帶參數調用,它返回根記錄器。 __name__返回當前模塊的名稱,因此logging.getLogger(__name__)返回Logger對象,其名稱設置爲當前模塊的名稱。這是與logging一起使用的常見模式,因爲它會使記錄器結構鏡像代碼的模塊結構,這通常會使日誌消息在調試時更加有用。

0

爲了找到日誌文件的位置,嘗試實例化您的log對象在您的環境中一個Python外殼,看着價值:

log.handlers[0].stream

3

爲了得到一個簡單的文件記錄器的日誌位置,嘗試

logging.getLoggerClass().root.handlers[0].baseFilename