1. 程式人生 > >python logging 日誌

python logging 日誌

loggingprint 區別,為什麼需要logging

在寫指令碼的過程中,為了除錯程式,我們往往會寫很多print列印輸出以便用於驗證,驗證正確後往往會註釋掉,一旦驗證的地方比較多,再一一註釋比較麻煩,這樣logging就應運而生了,直接把驗證資訊存在一個檔案中(例如在logging.basicConfig(裡面設定filename= 'employee.log',or直接打印出出來,不用設定finame,就會直接列印在cmd視窗中。

   

   

簡單將日誌列印到螢幕:

   

import logging

logging.debug('debug message')

logging.info('info message')

logging.warning('warning message')

logging.error('error message')

logging.critical('critical message')

輸出:

WARNING:root:warning message

ERROR:root:error message

CRITICAL:root:critical message

可見,預設情況下python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於WARNING級別的日誌,這說明預設的日誌級別設定為WARNING(日誌級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),預設的日誌格式為日誌級別:Logger名稱:使用者輸出訊息。

   

上面說的basicConfig方法可以滿足你在絕大多數場景下的使用需求,但是basicConfig有一個 很大的缺點。

呼叫basicConfig其實是給root logger添加了一個handler,這樣當你的程式和別的使用了 logging的第三方模組一起工作時,會影響第三方模組的logger行為。這是由logger的繼承特性決定的。

所以我們需要使用真正的logger

複製程式碼程式碼如下:

import logging

# 使用一個名字為fiblogger

logger = logging.getLogger('fib')

# 設定loggerlevelDEBUG

logger.setLevel(logging.DEBUG)

# 建立一個輸出日誌到控制檯的StreamHandler

hdr = logging.StreamHandler()

formatter = logging.Formatter('[%(asctime)s] %(name)s:%(levelname)s: %(message)s')

hdr.setFormatter(formatter)

# logger新增上handler

logger.addHandler(hdr)

這樣再使用logger來進行日誌輸出就行了。不過這樣的壞處就是程式碼量比basicConfig要大不少。 所以我建議如果是非常簡單的小指令碼的話,直接使用basicConfig就可以,如果是稍微大一些 專案,建議認真配置好logger