一、必備技能
1、logging模塊的使用
二、logging
1、logging的基本使用
1.1、日志的五個等級(DEBUG/INFO/WARNING/ERROR/CRITICAL)
1.2、打印不同日志等級的方法:
2、自定義日志收集器
2.1、創建日志收集器
總結
一、必備技能1、logging模塊的使用(1)5個日志等級/以及5個輸出日志的內置函數
(2)日志收集器、日志輸出渠道的概念
(3)如何自定義日志收集器
(4)如何封裝自定義的日志收集器
二、loggingpython的官方庫,打印日志用的,無需安裝,使用時直接調用
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級別的日志")
運行結果:
2、自定義日志收集器2.1、創建日志收集器ERROR:root:這是一條error級別的日志
CRITICAL:root:這是一條critical級別的日志
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,osfrom 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 loggingfrom logging import handlersdef 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 logif __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打印日志方法內容請搜索軟件開發網以前的文章或繼續浏覽下面的相關文章希望大家以後多多支持軟件開發網!