日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python打印日志方法的使用教程(logging模塊)_python

作者:測試小白00 ? 更新時間: 2022-08-18 編程語言

一、必備技能

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--------")

輸出結果:

總結

原文鏈接:https://blog.csdn.net/qq_49624649/article/details/122102349

欄目分類
最近更新