Python接口自動(dòng)化淺析logging日志原理及模塊操作流程
在上一篇Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程,主要介紹pymysql安裝、操作流程、語(yǔ)法基礎(chǔ)及封裝操作數(shù)據(jù)庫(kù)類。
以下主要介紹日志相關(guān)概念及l(fā)ogging日志模塊的操作流程。
一、日志介紹
01 為什么需要日志?
代碼需要經(jīng)歷開發(fā)、調(diào)試、審查、測(cè)試或者上線等不同階段,在開發(fā)時(shí)想要打印的信息類型可能和上線后想看到的信息類型完全不同。也就是說,在“測(cè)試”時(shí),可能只想看警告和錯(cuò)誤信息,然而在“調(diào)試”時(shí),可能還想看到跟調(diào)試相關(guān)的信息。 如果你想打印出使用的模塊以及代碼運(yùn)行的時(shí)間,那么代碼很容易變得混亂。使用logging日志模塊,這些問題就能很容易地解決。
02 什么是日志?
日志就是用于記錄系統(tǒng)運(yùn)行時(shí)的信息,對(duì)一個(gè)事件的記錄,也稱為L(zhǎng)og。
03 日志的用途是什么?
日志的基本用途如下:
- 記錄程序運(yùn)行過程中的錯(cuò)誤,方便跟蹤定位問題,減少調(diào)試和維護(hù)成本;
- 通過日志能還原整個(gè)程序的執(zhí)行過程,能了解程序的整體狀態(tài);
- 對(duì)用戶行為分析和數(shù)據(jù)統(tǒng)計(jì),知曉信息來自于哪個(gè)模塊;
- 在設(shè)計(jì)測(cè)試框架的時(shí)候,也可以通過設(shè)計(jì)日志來記錄框架的整個(gè)測(cè)試流程;
04 日志的級(jí)別分為哪些?
常見日志等級(jí),如下:
DEBUG:
調(diào)試級(jí)別(Value=10),打印非常詳細(xì)的日志信息,通常僅在Debug時(shí)使用,如算法中每個(gè)循環(huán)的中間狀態(tài);
INFO:
信息級(jí)別(Value=20),打印一般的日志信息,突出強(qiáng)調(diào)程序的運(yùn)行過程 ,主要用于處理請(qǐng)求或者狀態(tài)變化等日常事務(wù);
ERROR:
錯(cuò)誤級(jí)別(Value=40),打印錯(cuò)誤異常信息,該級(jí)別的錯(cuò)誤可能會(huì)導(dǎo)致系統(tǒng)的一些功能無法正常使用,如IO操作失敗或者連接問題;
CRITICAL:
嚴(yán)重錯(cuò)誤(Value=50),一個(gè)嚴(yán)重的錯(cuò)誤,導(dǎo)致系統(tǒng)可能無法繼續(xù)運(yùn)行,如內(nèi)存耗盡、磁盤空間為空,一般很少使用;
05 日志功能的實(shí)現(xiàn)
幾乎所有開發(fā)語(yǔ)言都會(huì)內(nèi)置日志相關(guān)功能,或者會(huì)有比較優(yōu)秀的第三方庫(kù)來提供日志操作功能,比如:log4j,log4php等。它們功能強(qiáng)大、使用簡(jiǎn)單。
Python自身也提供了一個(gè)用于記錄日志的標(biāo)準(zhǔn)庫(kù)模塊——logging。
二、Logging模塊
01 logging模塊介紹
logging模塊是Python內(nèi)置的標(biāo)準(zhǔn)模塊,主要用于輸出運(yùn)行日志,可以設(shè)置輸出日志的等級(jí)、日志保存路徑、日志文件回滾等。
02 logging模塊優(yōu)勢(shì)
相比print,具備如下優(yōu)點(diǎn):
- 可以在 logging 模塊中設(shè)置日志等級(jí),在不同的relase版本(如開發(fā)環(huán)境、生產(chǎn)環(huán)境)上通過設(shè)置不同的輸出等級(jí)來記錄對(duì)應(yīng)的日志,只輸出重要信息,而不必顯示大量的調(diào)試信息;
- print 的輸出信息都會(huì)輸出到標(biāo)準(zhǔn)輸出流中,嚴(yán)重影響開發(fā)者從標(biāo)準(zhǔn)輸出中查看其它數(shù)據(jù),而 logging 模塊更加靈活,可以設(shè)置輸出到任意位置,如寫入文件、寫入遠(yuǎn)程服務(wù)器等;
- logging 模塊具有靈活的配置和格式化功能,如配置輸出當(dāng)前模塊信息、運(yùn)行時(shí)間等,由開發(fā)者決定將信息輸出到什么地方,以及怎么輸出,相比 print 的字符串格式化更加方便易用。
03 logging日志框架的組成
Logger:
日志,暴露函數(shù)給應(yīng)用程序,基于日志記錄器和過濾器級(jí)別決定哪些日志有效。
LogRecord :
日志記錄器,將日志傳到相應(yīng)的處理器處理。
Handler :
處理器, 將(日志記錄器產(chǎn)生的)日志記錄發(fā)送至合適的目的地。
Filter :
過濾器, 提供了更好的粒度控制,它可以決定輸出哪些日志記錄。
Formatter:
格式化器, 指明了最終輸出中日志記錄的布局。
04 logging函數(shù)中的具體參數(shù)
filename:
指定的文件名創(chuàng)建FiledHandler,這樣日志會(huì)被存儲(chǔ)在指定的文件中;
filemode:
文件打開方式,在指定了filename時(shí)使用這個(gè)參數(shù),默認(rèn)值為“w”還可指定為“a”;
format:
指定handler使用的日志顯示格式;
datefmt:
指定日期時(shí)間格式
level:
設(shè)置rootlogger的日志級(jí)別;
stream:
用指定的stream創(chuàng)建StreamHandler;
05 簡(jiǎn)單的日志小例子
我們?cè)囍謩e輸出一條不同日志級(jí)別的日志記錄:
import logging logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.")
輸出結(jié)果為:
WARNING:root:This is a warning log.
ERROR:root:This is a error log.
CRITICAL:root:This is a critical log.
為什么debug、info級(jí)別日志沒輸出呢?logging模塊提供的默認(rèn)的日志級(jí)別是WARNING,所以只輸出了WARNING及以上的日志級(jí)別。
輸出內(nèi)容格式說明:日志級(jí)別:日志器名稱:日志內(nèi)容, 如果未自定義日志器名稱,默認(rèn)是root。
以下是源碼:
def getLogger(name=None): """ Return a logger with the specified name, creating it if necessary. If no name is specified, return the root logger. """ if name: return Logger.manager.getLogger(name) else: return root
06 自定義logger日志
設(shè)置日志收集器及級(jí)別:
# 定義一個(gè)日志收集器 logger = logging.getLogger('ITester') # 設(shè)置收集器的級(jí)別,不設(shè)定的話,默認(rèn)收集warning及以上級(jí)別的日志 logger.setLevel('DEBUG')
設(shè)置日志格式:
fmt =logging.Formatter('%(filename)s-%(lineno)d-%(asctime)s-%(levelname)s-%(message)s')
常見的日志輸出格式:
設(shè)置日志處理器-輸出到文件:
# 輸出到文件 file_handler = logging.FileHandler('../log/mylog.txt') # 設(shè)置日志處理器級(jí)別 file_handler.setLevel("DEBUG") # 處理器按指定格式輸出日志 file_handler.setFormatter(fmt)
在項(xiàng)目下新建一個(gè)文件夾log,在文件夾下新建文件mylog.txt用于存放日志。
設(shè)置日志處理器-輸出到控制臺(tái):
# 輸出到控制臺(tái) ch = logging.StreamHandler() # 設(shè)置日志處理器級(jí)別 ch.setLevel("DEBUG") # 處理器按指定格式輸出日志 ch.setFormatter(fmt)
收集器和處理器對(duì)接,指定輸出渠道:
# 日志輸出到文件 logger.addHandler(file_handler) # 日志輸出到控制臺(tái) logger.addHandler(ch)
logger日志大致流程圖,如下:
我們將以上獨(dú)立的介紹糅合到一起,測(cè)試功能是否正常。在common目錄下,新建文件logger_handler.py。
import logging # 定義一個(gè)日志收集器 logger = logging.getLogger('ITester') # 設(shè)置收集器的級(jí)別,不設(shè)定的話,默認(rèn)收集warning及以上級(jí)別的日志 logger.setLevel('DEBUG') # 設(shè)置日志格式 fmt =logging.Formatter('%(filename)s-%(lineno)d-%(asctime)s-%(levelname)s-%(message)s') # 設(shè)置日志處理器-輸出到文件 file_handler = logging.FileHandler('../log/mylog.txt') # 設(shè)置日志處理器級(jí)別 file_handler.setLevel("DEBUG") # 處理器按指定格式輸出日志 file_handler.setFormatter(fmt) # 輸出到控制臺(tái) ch = logging.StreamHandler() # 設(shè)置日志處理器級(jí)別 ch.setLevel("DEBUG") # 處理器按指定格式輸出日志 ch.setFormatter(fmt) # 收集器和處理器對(duì)接,指定輸出渠道 # 日志輸出到文件 logger.addHandler(file_handler) # 日志輸出到控制臺(tái) logger.addHandler(ch) if __name__ == '__main__': logger.debug('自定義的debug日志') logger.info('自定義的info日志') logger.warning('自定義的warning日志') logger.error('自定義的error日志') logger.critical('自定義的critical日志')
控制臺(tái)輸出效果:
文件輸出效果:
以上就是Python接口自動(dòng)化淺析logging日志原理及模塊操作流程的詳細(xì)內(nèi)容,更多關(guān)于Python接口自動(dòng)化logging日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)用戶登錄系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)用戶登錄系統(tǒng)的相關(guān)資料,感興趣的朋友可以參考一下2016-05-05手把手教你使用Python解決簡(jiǎn)單的zip文件解壓密碼
本文主要介紹了Python解決簡(jiǎn)單的zip文件解壓密碼,使用的核心模塊是python標(biāo)準(zhǔn)庫(kù)中的zipfile模塊。具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11python獲取局域網(wǎng)占帶寬最大3個(gè)ip的方法
這篇文章主要介紹了python獲取局域網(wǎng)占帶寬最大3個(gè)ip的方法,涉及Python解析URL參數(shù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Python中基本數(shù)據(jù)類型和常用語(yǔ)法歸納分享
這篇文章主要為大家整理記錄了Python中基本數(shù)據(jù)類型和常用語(yǔ)法的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04Python OpenCV 針對(duì)圖像細(xì)節(jié)的不同操作技巧
這篇文章主要介紹了Python OpenCV 針對(duì)圖像細(xì)節(jié)的不同操作,包括圖像像素的說明,圖像屬性信息的獲取與修改以及圖像通道的知識(shí)(包括拆分通道和合并通道),需要的朋友可以參考下2021-08-08Python實(shí)現(xiàn)刪除windows下的長(zhǎng)路徑文件
這篇文章主要為大家詳細(xì)介紹一下如何利用Python語(yǔ)言實(shí)現(xiàn)刪除windows下的長(zhǎng)路徑文件功能,文中的示例代碼講解詳細(xì),具有一定參考借鑒價(jià)值,感興趣的可以了解一下2022-07-07python實(shí)現(xiàn)簡(jiǎn)單日志記錄庫(kù)glog的使用
這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單日志記錄庫(kù)glog的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python 實(shí)現(xiàn)兩個(gè)線程交替執(zhí)行
這篇文章主要介紹了python 實(shí)現(xiàn)兩個(gè)線程交替執(zhí)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python獲取全國(guó)最新省市區(qū)數(shù)據(jù)并存入表實(shí)例代碼
我們?cè)陂_發(fā)中經(jīng)常會(huì)遇到獲取省市區(qū)等信息的時(shí)候,下面這篇這篇文章主要給大家介紹了關(guān)于python獲取全國(guó)最新省市區(qū)數(shù)據(jù)并存入表的相關(guān)資料,需要的朋友可以參考下2021-08-08