自己封裝的logging,封裝日誌的幾個組件
Logger 記錄器暴露了應用程序代碼直接使用的接口。
Handler 處理器將日誌記錄(由記錄器創建)發送到適當的目標。
Filter 過濾器提供了更細粒度的功能,用於確定要輸出的日誌記錄。
Formatter 格式器指定最終輸出中日誌記錄的樣式。
日誌等級說明:
DEBUG:程序調試bug時使用
INFO:程序正常運行時使用
WARNING:程序未按預期運行時使用,但並不是錯誤,如:用戶登錄密碼錯誤
ERROR:程序出錯誤時使用,如:IO操作失敗
CRITICAL:特別嚴重的問題,導致程序不能再繼續運行時使用,如:磁盤空間爲空,一般很少使用
默認的是WARNING等級,當在WARNING或WARNING之上等級的才記錄日誌信息。 日誌等級從低到高的順序是: DEBUG < INFO < WARNING < ERROR < CRITICAL
1 import logging 2 3 4 def mylog(): 5 # 創建日誌器 6 logger = logging.getLogger() 7 # 設置日誌級別 8 logger.setLevel(logging.WARNING) 9 10 # 防止重複寫日誌,這裏進行判斷,若logger.handlers列表爲空則添加 11 if not logger.handlers: 12 # 創建控制檯處理器 13 sh = logging.StreamHandler() 14 # 將控制檯處理器放到日誌器中 15 logger.addHandler(sh) 16 17 # 創建文件處理器 18 fh = logging.FileHandler('log4.txt', encoding='utf-8') 19 # 將文件處理器放到日誌器中 20 logger.addHandler(fh) 21 22 # 根據格式,創建格式器 23 fmt1 = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s" 24 formatter1 = logging.Formatter(fmt1) 25 fmt2 = "%(asctime)s - %(filename)s - %(levelname)s: %(message)s" 26 formatter2 = logging.Formatter(fmt2) 27 28 # 給控制檯處理器設置格式 29 sh.setFormatter(formatter1) 30 # 給文件處理器設置格式 31 fh.setFormatter(formatter2) 32 33 return logger 34 35 36 mylog().debug("this is a debug msg") 37 mylog().info("this is a info msg") 38 mylog().warning("this is a warning msg") 39 mylog().error("this is a error msg") 40 mylog().critical("this is a critical msg")
控制檯輸出:
日誌文件的輸出: