python+pytest接口自動化之日志管理模塊loguru簡介
python自帶日志管理模塊logging
,使用時可進行模塊化配置,詳細可參考博文Python日志采集(詳細)。
但logging
配置起來比較繁瑣,且在多進行多線程等場景下使用時,如果不經(jīng)過特殊處理,則容易出現(xiàn)日志丟失或記錄錯亂的情況。
python中有一個用起來非常簡便的第三方日志管理模塊--loguru
,不僅可以避免logging的繁瑣配置,而且可以很簡單地避免在logging中多進程多線程記錄日志時出現(xiàn)的問題,甚至還可以自定義控制臺輸出的日志顏色。
接下來我們來學習怎么使用loguru
模塊進行日志管理。
安裝
第三方模塊,需要先安裝,安裝命令如下:
pip install loguru
簡單示例
簡單使用示例如下:
from loguru import logger # 日志寫入文件則需使用add()方法,"../log/test.log"即日志文件路徑,可自定義。 # 寫入文件的日志里有中文的話,需要加上encoding="utf-8",否則會顯示亂碼。 logger.add("../log/test.log", encoding="utf-8", rotation="500MB", enqueue=True, retention="7 days") # 打印不同類型的日志 logger.debug("這是一段debug級別日志") logger.info("這是一段info級別日志") logger.warning("這是一段warning級別日志") logger.critical("這是一段critical級別日志")
上面的示例代碼運行之后,會在控制臺打印如下日志:
同時也會在 "../log/test.log" 路徑中寫入日志,如下:
由以上結(jié)果可以看出:
- loguru中直接提供了一個日志記錄對象logger,拿來即用;
- loguru默認的輸出格式為:時間 | 級別 | 模塊名 | 行號 | 日志信息;
- 不同級別的日志在控制臺顯示顏色不一樣。
當然,在實際項目中我們還需要日志管理器有更豐富的配置,loguru中的add()
方法便具有強大的配置功能,接下來介紹add()
方法提供的常用配置功能。
add()常用參數(shù)說明
loguru
模塊源碼中add()
方法的參數(shù)如下:
sink(官方文檔簡單翻譯如下):
- 可以傳入類
file
對象,如sys.stderr
或者open('test.log', 'w')
。 - 可以傳入文件路徑
str
或pathlib
,如示例代碼中的寫入日志文件路徑。路徑可以使用一些附加參數(shù)對其進行參數(shù)化,如test_{time}.log
,{time}
即時間參數(shù),創(chuàng)建文件時文件名稱中會加入時間。 - 可以傳入像
lambda
這樣的可調(diào)用函數(shù)的簡單函數(shù),如lambda msg:print(msg)
。這允許完全由用戶偏好和需求定義日志記錄過程。 - 還可以是使用
async def
語句定義的異步協(xié)程函數(shù)。該函數(shù)返回的協(xié)程對象將使用loop.create_task()
添加到事件循環(huán)中。在使用complete()結(jié)束循環(huán)之前,應該等待這些任務。 - 也支持傳入logging模塊的
Handler
,如FileHandler
、StreamHandler
等,Loguru
記錄會自動轉(zhuǎn)換為日志模塊預期的結(jié)構(gòu)。
level:發(fā)送到sink
的日志消息的最低日志級別,即輸出的最低日志級別。
format:定義日志的輸出格式。
filter:過濾日志。
colorize:終端日志輸出的顏色。
serializer:bool值,輸出日志時是否先格式化成JSON
數(shù)據(jù)格式。
backtrace:bool值,是否進行異常跟蹤(即backtrace
信息記錄)。
diagnose:bool值,異常跟蹤是否應顯示變量值以簡化調(diào)試。在生產(chǎn)中應將其設(shè)置為False,以避免泄漏敏感數(shù)據(jù)。
enqueue:bool值,日志消息輸出之前是否先通過多進程安全隊列,多進程多線程運行寫入日志時需用到,避免日志記錄丟失或混亂。
catch:bool值,是否自動捕獲接收器處理日志消息時發(fā)生的錯誤。如果為True,則在sys上顯示異常消息。
繼續(xù)看loguru
模塊源碼,如下:
即我們需要將日志寫入指定的文件時,可以使用截圖中新增的參數(shù)。常用的參數(shù)說明如下:
rotation:指定日志文件記錄條件,日志輸出太多需要隔一段時間寫入新文件時適用。
# rotation指定日志文件最大為500MB,超過則新建文件記錄日志 logger.add("../log/test.log", rotation="500MB") # 指定每天12:00新建日志記錄文件:rotation="12:00" # 指定每隔10天新建日志記錄文件:rotation="10 days" # 指定每隔一個星期新建日志記錄文件:rotation="1 week" # 指定每隔兩個月新建日志記錄文件:rotation="2 months"
retention:指定日志保留時長,會清除超過指定時長的數(shù)據(jù)。
# rotation指定日志保留時長,如"1 week", "3 days", "2 months" logger.add("../log/test.log", retention="10 days")
compression:配置文件壓縮格式。
# rotation指定日志保留時長,如"gz", "bz2", "xz", "lzma", "tar", "tar.gz", "tar.bz2", "tar.xz", "zip" logger.add("../log/test.log", compression="zip")
encoding:指定寫入文件時的編碼格式,這在示例代碼中已說明。
使用
接下來,我們使用常用的參數(shù)來組合定義日志記錄方式。
from loguru import logger import sys # format建議直接使用默認的格式 logger.add("../log/test_{time}.log", level="INFO", encoding="utf-8", enqueue=True, rotation="500MB", retention="1 week") # 當然也可以自定義format,如下示例 # logger.add("../log/test_{time}.log", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name} | {line} | {message}", encoding="utf-8", enqueue=True, rotation="500MB", retention="1 week") # 打印不同類型的日志 logger.debug("這是一段debug級別日志") logger.info("這是一段info級別日志") logger.warning("這是一段warning級別日志") logger.critical("這是一段critical級別日志")
參數(shù)說明:
sink="../log/test_{time}.log"
,即指定日志文件路徑,且加入了{time}
,創(chuàng)建.log
文件時名稱會加上時間。level="INFO"
,寫入文件時只會寫入INFO
及以上級別的日志 (需要大寫),即INFO、WARNING、CRITICAL。encoding="utf-8"
,日志寫入文件時指定編碼格式為"utf-8",否則有中文的話會顯示亂碼。enqueue=True
,支持多線程多進程執(zhí)行時按照隊列寫入。rotation="500MB"
,日志文件最大為500MB,超過則新建。retention="1 week"
,日志保留一周,過后則清除。format
沒有指定即使用默認格式,建議直接使用默認的格式,見代碼注釋。
執(zhí)行代碼后,結(jié)果如下:
從結(jié)果中可以看出來,輸出內(nèi)容中模塊部分顯示的是如__main__:<module>:20
的形式,而并不是我們想要看到的對應的模塊名稱,這是因為直接執(zhí)運行了當前文件的文件,如果是其他模塊調(diào)用執(zhí)行便會顯示對應的模塊名稱。
到此這篇關(guān)于python+pytest接口自動化(15)-日志管理模塊loguru簡介的文章就介紹到這了,更多相關(guān)python日志管理模塊loguru內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對Python發(fā)送帶header的http請求方法詳解
今天小編就為大家分享一篇對Python發(fā)送帶header的http請求方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python實現(xiàn)將SQLite中的數(shù)據(jù)直接輸出為CVS的方法示例
這篇文章主要介紹了Python實現(xiàn)將SQLite中的數(shù)據(jù)直接輸出為CVS的方法,涉及Python連接、讀取SQLite數(shù)據(jù)庫及轉(zhuǎn)換CVS格式數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07python爬蟲框架scrapy實現(xiàn)模擬登錄操作示例
這篇文章主要介紹了python爬蟲框架scrapy實現(xiàn)模擬登錄操作,結(jié)合實例形式分析了scrapy框架實現(xiàn)模擬登陸操作的步驟、相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下2018-08-08