phthon 基礎 7.3 logging 日誌模塊
阿新 • • 發佈:2017-11-11
oot asi 程序 打印 %d 很多 format 運行 ica 一. logging 的使用
日誌是我們排查問題的關鍵利器,寫好日誌記錄,當我們發生問題時,可以快速定位代碼範圍進行修改。python有給我們開發者提供好的日誌模塊,下面我們就來介紹一下logging模塊:
import logging
#從上往下,日誌級別逐漸升高
logging.debug(‘this is debug message‘)
logging.info(‘this is info message‘)
logging.warning(‘this is warning message‘)
logging.error(‘this is error message‘)
logging.critical(‘this is critical message‘)
>>>
WARNING:root:this is warning message
ERROR:root:this is error message
CRITICAL:root:this is critical message
debug:詳細的信息,通常只出現在診斷問題上。
info:確認一切按預期運行
warning:一個警告,可能會有一些意想不到的事情發生了,或表明一些問題在不久的將來(例如,磁盤空間低)。這個軟件還能按預期工作。
error:一個更嚴重的問題,軟件沒能執行一些功能
critical:一個嚴重的錯誤,這表明程序本身可能無法繼續運行
默認logging的日誌級別為info,一般基本上所有程序都是這個級別,有助於我們排查問題,但是當發生問題,我們沒法定位問題,很多情況下我們需要把日誌級別提升到debug級別,那又怎麽辦呢?
二. 通過logging.basicConfig 函數對日誌的輸出格式及方式做相關配置。現實工作中,往往我們是要把日誌寫在日誌文件中的,那怎麽樣做呢?看如下代碼:
#通過logging.basicConfig 函數 把日誌寫在文件中
logging.basicConfig(level=logging.DEBUG,format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘
,datefmt=‘ %Y/%m/%d %H:%M:%S‘, filename=‘lzc.log‘, filemode=‘w+‘)
logging.debug(‘this is debug message‘)
logging.info(‘this is info message‘)
logging.warning(‘this is warning message‘)
logging.error(‘this is error message‘)
logging.critical(‘this is critical message‘)
打開生成的日誌文件 lzc.log
2017/11/10 04:34:10 logging ???.py[line:23] DEBUG this is debug message
2017/11/10 04:34:10 logging ???.py[line:24] INFO this is info message
2017/11/10 04:34:10 logging ???.py[line:25] WARNING this is warning message
2017/11/10 04:34:10 logging ???.py[line:26] ERROR this is error message
2017/11/10 04:34:10 logging ???.py[line:27] CRITICAL this is critical message
三。主要是通過logging.basicConfig 函數進行操作,現在我們來介紹該函數參數的用法:
level :設置日誌級別,默認為logging.WARNING
filename:指定日誌文件名
filemode:和file函數意義相同,指定日誌文件的打開模式,‘w‘或‘a‘
format:指定輸出的格式和內容,format可以輸出很多有用信息,如上例所示:
%(levelname)s:打印日誌級別名稱
%(filename)s:打印當前執行程序名
%(funcName)s:打印日誌的當前函數
%(lineno)d:打印日誌的當前行號
%(asctime)s:打印日誌的時間
%(thread)d:打印線程ID
%(message)s:打印日誌信息
datefmt:指定時間格式,同time.strftime()
stream:指定將日誌的輸出流,可以指定輸出到 sys.stderr,sys.stdout 或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
logging.getLogger([name]):創建一個日誌對象:
返回一個logger實例,如果沒有指定name,返回root logger。只要name相同,返回的logger 實例都是同一個而且只有一個,即name和logger 實例是一一對應的。這意味著,無需把logger實例在各個模塊中傳遞。只要知道name,就能得到同一個logger實例。
logging.getLogger(__name__) 在上述實例中__name__就指的是__main__.
phthon 基礎 7.3 logging 日誌模塊