標籤:簡單 簡單的 python使用 ack coding utf-8 class root handler
一. logging模組的介紹與使用
python使用logging模組記錄日誌涉及四個主要類,每個類的用法功能如下:
二. logging內容
logging模組--主要為以下三個方面:
記錄層級
日誌內容格式
日誌輸出方式
1. 記錄層級
critical > error > warning > info > debug
層級越高列印的日誌越少,反之亦然,即
2. logger的介紹
logger是後續程式可以直接調用的介面,如果不去建立一個logger的話,那麼就會預設調用root-logger(logging),因為logger在日誌系統裡面是有父級與子級的,如果沒有建立一個新的logger子級,那麼列印日誌的時候就會直接調用到父級。
常用方法:getLogger
我們來看個簡單的例子:
import logginglogger = logging.getLogger("autotest")#沒有輸出info層級的日誌,預設logging是WARNING層級的logger.info("我是INFO類型的日誌")logger.warning("我是警告類型的日誌")logger.error("我是錯誤類型的日誌輸出")
結果是這樣的:
3. setLevel的介紹
我們一般用setLevel來設定日誌的輸出層級
1) logging有如下層級:DEBUG、INFO、WARNING、ERROR、CRITICAL--->層級正序越來越高。預設層級是WARNING
2) logging模組只會輸出指定level以上的log
3) 用法logger.debug()、logger.info()、logger.warning()、logger.error()、logger.critical():用於日誌輸出,相當於print的作用
這樣的好處,就是在項目開發時debug用到的log,我們想要什麼層級的日誌,不需要去改代碼,只需要在這個層級設定裡改變日誌的輸出層級就可以了
4. handler的介紹
StreamHandler:
日誌資訊會輸出到指定的stream中,如果stream為空白則預設輸出到sys.stdeer,即控制台
FileHandler:
繼承自StreamHandler,將日誌資訊輸出到磁碟檔案上,預設情況下,記錄檔可以無限增大
logging模組中的handlers模組專門用來處理日誌輸出的,位於logging.handlers
常用handlers:
RotatingFileHandler:支援迴圈記錄檔
maxBytes:允許記錄檔在達到maxBytes時rollover。當檔案大小達到或者超過maxBytes時,就會新建立一個記錄檔
backupCount:備份數目,也就是最多能有多少個備份。命名會在日誌的base_name後面加上.0-.n的尾碼(比如:test.0.log、test.1.log...)
TimedRotatingFileHandler:在RotatingFileHandler的基礎上,支援定時產生新的記錄檔。when:時間間隔的類型
5. Formatter的介紹
logging.Formatter:用來設定在控制台或者在檔案中,日誌內容的呈現方式:
在建立Formatter對象的時候有如下兩個參數:
fmt:日誌中具體輸出哪些內容,日誌產生的時間,所在檔案,所在程式碼等
datefmt:時間的格式。預設格式為:%Y-%m-%d %H:%M:%S
註:在Formatter類中有說明fmt可以選用的選項
6. 執行個體
import loggingfrom logging.handlers import RotatingFileHandler#第一步:建立一個記錄收集器loggerlogger = logging.getLogger("autotest")#第二步:修改日誌輸出層級logger.setLevel(logging.INFO)#第三步:設定輸出的日誌內容格式fmt = ‘%(asctime)s %(filename)s %(funcName)s [line:%(lineno)d] %(levelname)s %(message)s‘datefmt = ‘%a, %d %b %Y %H:%M:%S‘fm = logging.Formatter(fmt, datefmt)#第四步:設定輸出渠道--輸出到檔案handlerhd_1 = RotatingFileHandler("autotest.log", maxBytes=1024*1024*2, backupCount=10, encoding="utf-8")#在handler上指定日誌內容格式hd_1.setFormatter(fm)#設定輸出渠道--輸出到控制台hd_2 = logging.StreamHandler()
#在handler上指定日誌內容格式hd_2.setFormatter(fm)#第五步:將headler添加到日誌logger上logger.addHandler(hd_1)logger.addHandler(hd_2)#第六步:調用輸出方法logger.info("hahahahahhahahah---")logger.warning("我是警告類型的日誌")logger.error("我是錯誤類型的日誌輸出")logger.info("hehehehhehe")
檔案輸出結果:
控制台輸出結果:
7. 總結
python的logging模組