Python logging模塊原理解析及應(yīng)用
一、logging日志模塊等級
常見log級別從高到低:
CRITICAL 》ERROR 》WARNING 》INFO 》DEBUG,默認(rèn)等級為WARNING,即>=WARNING級別的log才輸出。
日志等級(level) | 描述 |
CRITICAL | 當(dāng)發(fā)生嚴(yán)重錯(cuò)誤,導(dǎo)致應(yīng)用程序不能繼續(xù)運(yùn)行時(shí)記錄的信息 |
ERROR | 由于一個(gè)更嚴(yán)重的問題導(dǎo)致某些功能不能正常運(yùn)行時(shí)記錄的信息 |
WARNING | 當(dāng)某些不期望的事情發(fā)生時(shí)記錄的信息(如,磁盤可用空間較低),但是此時(shí)應(yīng)用程序還是正常運(yùn)行的 |
INFO | 信息詳細(xì)程度僅次于DEBUG,通常只記錄關(guān)鍵節(jié)點(diǎn)信息,用于確認(rèn)一切都是按照我們預(yù)期的那樣進(jìn)行工作 |
DEBUG | 最詳細(xì)的日志信息,典型應(yīng)用場景是 問題診斷 |
二、logging模塊的使用方式介紹
logging模塊提供了兩種記錄日志的方式:
- 第一種方式是使用logging提供的模塊級別的函數(shù)
- 第二種方式是使用Logging日志系統(tǒng)的四大組件
其實(shí),logging所提供的模塊級別的日志記錄函數(shù)也是對logging日志系統(tǒng)相關(guān)類的封裝而已。
(1)logging模塊定義的模塊級別的常用函數(shù)
函數(shù) | 說明 |
---|---|
logging.debug(msg, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為DEBUG的日志記錄 |
logging.info(msg, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為INFO的日志記錄 |
logging.warning(msg, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為WARNING的日志記錄 |
logging.error(msg, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為ERROR的日志記錄 |
logging.critical(msg, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為CRITICAL的日志記錄 |
logging.log(level, *args, **kwargs) | 創(chuàng)建一條嚴(yán)重級別為level的日志記錄 |
logging.basicConfig(**kwargs) | 對root logger進(jìn)行一次性配置 |
其中l(wèi)ogging.basicConfig(**kwargs)函數(shù)用于指定“要記錄的日志級別”、“日志格式”、“日志輸出位置”、“日志文件的打開模式”等信息,其他幾個(gè)都是用于記錄各個(gè)級別日志的函數(shù)。
(2)logging模塊的四大組件
組件 | 說明 |
---|---|
loggers | 提供應(yīng)用程序代碼直接使用的接口 |
handlers | 用于將日志記錄發(fā)送到指定的目的位置 |
filters | 提供更細(xì)粒度的日志過濾功能,用于決定哪些日志記錄將會被輸出(其它的日志記錄將會被忽略) |
formatters | 用于控制日志信息的最終輸出格式 |
三、自定義Logger模塊類
# testLog1.py import logging import time class Logger(): def __init__(self, logger, level=logging.DEBUG): ''' : 自定義Logger模塊類 : logger: logger名 : level: 日志級別 ''' # 創(chuàng)建一個(gè)logger self.logger = logging.getLogger(logger) self.logger.setLevel(level) # 定義handler的輸出格式 curr_time = time.strftime("%Y-%m-%d") self.LogFileName = 'log' + curr_time + '.txt' fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s') # asctime: 日志事件發(fā)生的時(shí)間 # filename: 源文件的名稱部分,包含文件后綴 # lineno: 調(diào)用日志記錄函數(shù)的源代碼所在的行號 # evelname: 該日志記錄的文字形式的日志級別 # message: 日志記錄的文本內(nèi)容 # 創(chuàng)建一個(gè)handler, 用于寫入日志文件 fh = logging.FileHandler(self.LogFileName) fh.setLevel(logging.DEBUG) fh.setFormatter(fmt) # 再創(chuàng)建一個(gè)handler,用于輸出到控制臺 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) ch.setFormatter(fmt) # 給logger添加handler self.logger.addHandler(fh) self.logger.addHandler(ch) # level優(yōu)先級 # logger.setLevel > handler.setLevel > logging.basicConfig if __name__ == "__main__": log = Logger(__name__, level=logging.DEBUG) log.logger.debug('debug') log.logger.log(logging.DEBUG, 'debug')# 執(zhí)行testLog1.py,則控制臺輸出如下:2020-08-03 20:36:47,104 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug# 日志文件記錄如下:2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:15,982 - testLog1.py:[118] - [DEBUG] - debug
# testLog2.py from testLog1 import Logger import traceback log = Logger(__name__) def func(): try: assert 1==2 except Exception: log.logger.info('測試失敗,輸出信息如下:{}'.format(traceback.format_exc())) # traceback.format_exc() 會返回異常信息的字符串 if __name__ == "__main__": func()# 執(zhí)行testLog2.py,則控制臺輸出如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 測試失敗,輸出信息如下:Traceback (most recent call last): File "E:/imooc/testLog.py", line 9, in func assert 1==2AssertionError# 日志文件記錄如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 測試失敗,輸出信息如下:Traceback (most recent call last): File "E:/imooc/testLog.py", line 9, in func assert 1==2AssertionError
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 日志模塊logging的使用場景及示例
- Python的logging模塊基本用法
- python logging模塊的使用詳解
- python logging模塊的使用
- Python logging模塊handlers用法詳解
- Python logging模塊進(jìn)行封裝實(shí)現(xiàn)原理解析
- Python logging日志模塊 配置文件方式
- Python logging模塊異步線程寫日志實(shí)現(xiàn)過程解析
- Python logging模塊寫入中文出現(xiàn)亂碼
- Python日志處理模塊logging用法解析
- python將logging模塊封裝成單獨(dú)模塊并實(shí)現(xiàn)動態(tài)切換Level方式
- python 日志 logging模塊詳細(xì)解析
- 多個(gè)python文件調(diào)用logging模塊報(bào)錯(cuò)誤
- Python基礎(chǔ)之logging模塊知識總結(jié)
相關(guān)文章
在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù)
今天小編就為大家分享一篇在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法
本文主要介紹了Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Python實(shí)現(xiàn)的根據(jù)文件名查找數(shù)據(jù)文件功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的根據(jù)文件名查找數(shù)據(jù)文件功能,涉及Python針對文件與目錄的遍歷、查詢等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05tensorflow模型保存、加載之變量重命名實(shí)例
今天小編就為大家分享一篇tensorflow模型保存、加載之變量重命名實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python利用TextBlob庫實(shí)現(xiàn)輕松分析文本情感
TextBlob是一個(gè)基于NLTK(Natural Language Toolkit)和Pattern庫的Python庫,它提供了一系列方便的接口和方法來處理文本數(shù)據(jù),下面我們就來學(xué)習(xí)一下如何利用TextBlob庫實(shí)現(xiàn)輕松分析文本情感吧2023-12-12詳解用TensorFlow實(shí)現(xiàn)邏輯回歸算法
本篇文章主要介紹了詳解用TensorFlow實(shí)現(xiàn)邏輯回歸算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05用Python進(jìn)行基礎(chǔ)的函數(shù)式編程的教程
這篇文章主要介紹了用Python進(jìn)行基礎(chǔ)的函數(shù)式編程的教程,除了面向?qū)ο缶幊桃馔?、Python還可以進(jìn)行簡單的不依賴外部變量的函數(shù)式編程,本文介紹了其中的一些基礎(chǔ),需要的朋友可以參考下2015-03-03