首頁 > 軟體

python列印紀錄檔方法的使用教學(logging模組)

2022-06-27 14:01:43

一、必備技能

1、logging模組的使用

(1)5個紀錄檔等級/以及5個輸出紀錄檔的內建函數

(2)紀錄檔收集器、紀錄檔輸出渠道的概念

(3)如何自定義紀錄檔收集器

(4)如何封裝自定義的紀錄檔收集器

二、logging

python的官方庫,列印紀錄檔用的,無需安裝,使用時直接呼叫

1、logging的基本使用

1.1、紀錄檔的五個等級(DEBUG/INFO/WARNING/ERROR/CRITICAL)

(1)DEBUG:偵錯模式下的紀錄檔,只給程式設計師看的紀錄檔

(2)INFO:程式正常執行的時候輸出的紀錄檔

(3)WARN/WARNING:警告資訊,當前程式還可以執行,後面有可能出現問題

(4)ERROR:程式執行過程總的錯誤資訊

(5)CRITICAL:發生嚴重錯誤,阻塞流程,程式可能無法繼續執行

1.2、列印不同紀錄檔等級的方法:

(1)logging.debug("偵錯紀錄檔資訊")

(2)logging.info("重要紀錄檔資訊")

(3)logging.warning("警告紀錄檔資訊")

(4)logging.error("錯誤紀錄檔資訊")

(5)logging.critical("致命紀錄檔資訊")

1.3、紀錄檔收集器和紀錄檔輸出渠道:

        紀錄檔收集器:

                預設收集器的名字為root,預設收集等級為WARNING,通過如下步驟設定收集器的等級

                log = logging.getLogger() # 獲取紀錄檔收集器,預設為root

                log.setLevel("等級")  # 等級必須大寫

                logging.basicConfig(level=logging.DEBUG)  # 設定收集器的等級

        紀錄檔輸出渠道:

                預設輸出等級為WARNING

                輸出渠道支援:輸出到資料夾和輸出到控制檯

Demo範例1——預設WARNING等級

import logging
# 列印不同等級的紀錄檔(debug、info、warning、error、critical)
# 如下5條紀錄檔,只會列印WARNING等級以後的紀錄檔
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級別的紀錄檔

Demo範例2——預設的紀錄檔收集器

import logging
# # logging.basicConfig(level=logging.DEBUG) 設定紀錄檔級別
# 未指定name,預設返回自帶的預設的root收集器
# 預設輸出WARN級別以上的等級紀錄檔
# 如果設定了WARNING以下的等級,則輸出WARNING等級以上的紀錄檔
# 如果設定了WARNING以上的等級,比如設定了ERROR,則輸出ERROR等級以上的紀錄檔
log = logging.getLogger()
# log.setLevel("DEBUG")
# log.setLevel("INFO")
# log.setLevel("WARNING")
log.setLevel("ERROR")
# log.setLevel("CRITICAL")
 
 
logging.debug("這是一條debug級別的紀錄檔")
logging.info("這是一條info級別的紀錄檔")
logging.warning("這是一條warning級別的紀錄檔")
logging.error("這是一條error級別的紀錄檔")
logging.critical("這是一條critical級別的紀錄檔")

 執行結果:

ERROR:root:這是一條error級別的紀錄檔
CRITICAL:root:這是一條critical級別的紀錄檔

2、自定義紀錄檔收集器

2.1、建立紀錄檔收集器

      log = logging.getLogger(name="rose_logger")

        不傳name引數時,預設返回收集器名字為“root”

        傳了name引數時,會建立一個新的紀錄檔收集器

2.2、建立紀錄檔收集渠道

(1)輸出到控制檯:

        pycharm = logging.StreamHandler()

(2)輸出到檔案:    

        file = logging.FileHandler(os.getcwd()+r"rose.log",encoding="utf-8")

        file=handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")

        注意點(引數):

        filename, 紀錄檔的檔名稱(包含路徑)

        when= 'h', 紀錄檔的切割單位

        # S - Seconds 秒

        # M - Minutes 分鐘

        # H - Hours 小時

        # D - Days 天(24小時)

        # midnight - roll over at midnight 日切

        # W{0-6} - roll over on a certain day; 0 - Monday 周

        interval=1, 捲動週期,與when='h'連動,1-表示以時間為週期

        backupCount=0 保留紀錄檔檔案的個數,設定為10,永遠只儲存最近的10個檔案

2.3、建立紀錄檔的輸出格式 (1)建立紀錄檔格式物件

        pycharm_fmt = logging.Formatter(fmt=fmt1)

(2)將紀錄檔輸出格式繫結到紀錄檔輸出渠道

        pycharm.setFormatter(fmt=pycharm_fmt)  ——設定到控制檯紀錄檔渠道

        file.setFormatter(fmt=pycharm_fmt1)——設定到檔案紀錄檔渠道

(3)常用的格式模板(也可以自己定義)

        fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"

        fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'

(4)格式必須按照指定的格式格式化。常用的如下:

        %(asctime)s——當前時間

        %(funcName)s——模組名

        %(lineno)d——行號

        %(levelname)s——紀錄檔等級名稱

         %(message)s——具體的紀錄檔內容 

   Demo範例3——自定義紀錄檔收集器和紀錄檔格式

import logging,os
from logging import handlers
# 1、建立紀錄檔收集器
log = logging.getLogger(name="rose_logger")
 
# 2、建立紀錄檔收集渠道
# 輸出控制檯
pycharm = logging.StreamHandler()
# 輸出資料夾
file = logging.FileHandler(os.getcwd()+r"rose.log",encoding="utf-8")
# file = handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")
 
# 3、建立紀錄檔的輸出格式
fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
# 建立一個紀錄檔輸出物件
pycharm_fmt = logging.Formatter(fmt=fmt1)
fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
pycharm_fmt1 = logging.Formatter(fmt=fmt2)
 
# 4、紀錄檔輸出格式繫結到紀錄檔輸出渠道
pycharm.setFormatter(fmt=pycharm_fmt)
file.setFormatter(fmt=pycharm_fmt1)
 
# 5、直接給收集器設定紀錄檔級別就可以了,渠道會繼承收集器的紀錄檔級別
log.setLevel(level=logging.DEBUG)
# 5、給收集渠道設定紀錄檔級別,檔案渠道,控制檯輸出的級別不會一樣
# pycharm.setLevel(logging.DEBUG)
 
# 6、將紀錄檔收集渠道繫結到紀錄檔收集器
log.addHandler(pycharm)
log.addHandler(file)
 
log.info(msg="測試")

輸出結果:

Demo範例4——封裝自定義紀錄檔收集器

import logging
from logging import handlers
def create_log(name,level,filename,sh_level,fh_level):
    """
    :param name:  紀錄檔收集器名字
    :param level: 紀錄檔收集器的等級
    :param filename:  紀錄檔檔案的名稱
    :param sh_level:  控制檯輸出紀錄檔的等級
    :param fh_level:    檔案輸出紀錄檔的等級
    :return: 返回建立好的紀錄檔收集器
    """
 
    # 1、建立紀錄檔收集器
    log = logging.getLogger(name)
 
    # 2、建立紀錄檔收集器的等級
    log.setLevel(level=level)
 
    # 3、建立紀錄檔收集渠道和等級
    sh = logging.StreamHandler()
    sh.setLevel(level=sh_level)
    log.addHandler(sh)
    fh = logging.FileHandler(filename=filename,encoding="utf-8")
    # fh1 = handlers.TimedRotatingFileHandler(filename=filename,when="D",interval=1,backupCount=10,encoding="utf-8")
    fh.setLevel(level=fh_level)
    log.addHandler(fh)
 
    # 4、設定紀錄檔的輸出格式
    formats = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
    log_format = logging.Formatter(fmt=formats)
    sh.setFormatter(log_format)
    fh.setFormatter(log_format)
    return log
 
if __name__ == '__main__':
    log = create_log(name="rose_log",level=logging.DEBUG,filename="test_log.log",sh_level=logging.DEBUG,fh_level=logging.DEBUG)
    log.info(msg="--------debug--------")
    log.info(msg="--------info--------")
    log.info(msg="--------warning--------")
    log.info(msg="--------error--------")
    log.info(msg="--------critical--------")

輸出結果:

總結

到此這篇關於python列印紀錄檔方法使用的文章就介紹到這了,更多相關python列印紀錄檔方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com