python的logging模組

來源:互聯網
上載者:User

標籤:簡單   簡單的   python使用   ack   coding   utf-8   class   root   handler   

一. logging模組的介紹與使用

python使用logging模組記錄日誌涉及四個主要類,每個類的用法功能如下:

  • logger:提供了應用程式可以直接使用的介面
  • handler:將(logger建立的)日誌記錄發送到合適目的的輸出

  • setLevel:提供了細度裝置來決定輸出哪種層級的日誌記錄

  • formatter:決定日誌記錄的最終輸出形式

二. logging內容

logging模組--主要為以下三個方面:

  1. 記錄層級

  2. 日誌內容格式

  3. 日誌輸出方式

1. 記錄層級

critical > error > warning > info > debug

層級越高列印的日誌越少,反之亦然,即

  • debug:列印全部的日誌

  • info:列印info,warning,error,critical層級的日誌
  • warning:列印warning,error,critical界別的日誌

  • error:列印error,critical層級的日誌

  • critical:列印critical層級的日誌

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模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.