前言
努力從今天開始,成功從“零”開始。
一、logging模塊是什么?
是Python內置的標准模塊,主要用於輸出運行日志
二、日志是什么?
- 日志是代碼的必要組成部分
- 記錄日志能顯示程序當前運行狀態
- 出問題后定位當時問題
- 對日志記錄的數據挖掘進行統計和分析(比如 **地區登錄APP人數較多等)
三、python日志級別
DEBUG:調試信息
INFO:有用的信息
WARNING:警告信息 (默認日志級別)
ERROR:錯誤信息
CRITICAL:嚴重錯誤信息
NOTSET:非級別,表示不設置,按照父logger級別來過濾日志
日志級別關系:
NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
備注:如果把log的級別設置為INFO, 那么小於INFO級別的日志都不輸出, 大於等於INFO級別的日志都輸出。也就是說,日志級別越高,打印的日志越不詳細。
四、logging模塊實戰
- 4.1 logging模塊基礎代碼
import logging
logging.debug('-----調試信息[debug]-----')
logging.info('-----有用的信息[info]-----')
logging.warning('-----警告信息[warning]-----')
logging.error('-----錯誤信息[error]-----')
logging.critical('-----嚴重錯誤信息[critical]-----')
由於沒有設置日志級別,默認WARNING級別,上述代碼輸出如下:
WARNING:root:-----警告信息[warning]-----
ERROR:root:-----錯誤信息[error]-----
CRITICAL:root:-----嚴重錯誤信息[critical]-----
Process finished with exit code 0
- 4.2 自定義日志級別
import logging
logging.basicConfig(level=logging.DEBUG) #設置日志級別為DEBUG,注意要大寫
logging.debug('-----調試信息[debug]-----')
logging.info('-----有用的信息[info]-----')
logging.warning('-----警告信息[warning]-----')
logging.error('-----錯誤信息[error]-----')
logging.critical('-----嚴重錯誤信息[critical]-----')
- 4.3 自定義日志顯示格式
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.debug('-----調試信息[debug]-----')
logging.info('-----有用的信息[info]-----')
logging.warning('-----警告信息[warning]-----')
logging.error('-----錯誤信息[error]-----')
logging.critical('-----嚴重錯誤信息[critical]-----')
其中format是控制日志格式用的,具體格式包含:(ps:讀者可以換到上面代碼部分試試)
%(levelno)s: 打印日志級別的數值
%(levelname)s: 打印日志級別名稱
%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日志的當前函數
%(lineno)d: 打印日志的當前行號
%(asctime)s: 打印日志的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日志信息
- 4.4 自定義日志輸出到文件
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
filename='test.log')
logging.debug('-----調試信息[debug]-----')
logging.info('-----有用的信息[info]-----')
logging.warning('-----警告信息[warning]-----')
logging.error('-----錯誤信息[error]-----')
logging.critical('-----嚴重錯誤信息[critical]-----')
其中上述代碼中 filename 參數為日志文件配置
小結
- 如果沒有接觸過日志的朋友使用本篇入門非常不錯
- 本篇中使用了 basicConfig() 這種方式去配置日志,其實還有多種方式配置(如配置文件配置、自定義logger對象配置等)