python第三方異步日志庫(kù)loguru簡(jiǎn)介
一、引言
在編寫調(diào)試Python代碼過(guò)程中,我們經(jīng)常需要記錄日志,通常我們會(huì)采用python自帶的內(nèi)置標(biāo)準(zhǔn)庫(kù)logging,但是使用該庫(kù),配置較為繁瑣。為了提升編程效率,本文重點(diǎn)介紹最近發(fā)現(xiàn)的一個(gè)寶藏第三方日志庫(kù)Loguru,該庫(kù)名字來(lái)自于印度語(yǔ),含義為日志大師。
我們先來(lái)做個(gè)直觀的對(duì)比,來(lái)說(shuō)明Loguru的優(yōu)雅之處。使用python自帶的logging,樣例代碼如下:
樣例輸出如下:
使用Loguru庫(kù),樣例代碼如下:
使用Loguru輸出日志,終端執(zhí)行后出現(xiàn)帶顏色的日志,而且使用超級(jí)方便。
二、安裝loguru
直接使用pip進(jìn)行安裝即可,命令如下:
pip install loguru
輸出到終端使用方式:
from loguru import logger logger.debug("msg msg msg!")
輸出到文件使用方式:
from loguru import logger logger.add("file_name.log") logger.debug("msg msg msg!")
三、特性
參考官方github,里面給出了Loguru庫(kù)豐富的特性,這里挑選幾個(gè)重要的特性進(jìn)行講解
3.1 開箱即用
Loguru庫(kù)設(shè)計(jì)的初衷就在于追求有且僅有一個(gè)logger,為了使用方便,提前預(yù)置輸出樣式。如果需要打印日志僅需采取如下方式:
from loguru import logger logger.debug("That's it, beautiful and simple logging!")
3.2 無(wú)需初始化,導(dǎo)入函數(shù)即可使用
在Loguru中,我們?nèi)绾巫远x輸出樣式?如何過(guò)濾輸出信息?如何設(shè)置日志級(jí)別?
答案是調(diào)用 add() 函數(shù)
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
示例如下:
from loguru import logger logger.add("info.log", format="{time} {level} {message}", filter="", level="INFO") logger.debug("This is a debug msg") logger.info("This is a info msg")
我們查看info.log,結(jié)果如下:
3.3 更容易的文件日志記錄與轉(zhuǎn)存/保留/壓縮方式
我們可以通過(guò)簡(jiǎn)單的配置,來(lái)讓日志保存更加人性化。比如我們想要?jiǎng)h除老的日志,或者我們希望自動(dòng)壓縮保存好的日志,可以參考一下命令:
logger.add("file_1.log", rotation="500 MB") # 文件過(guò)大(超過(guò)500M)就會(huì)重新生成一個(gè)文件 logger.add("file_2.log", rotation="12:00") # 每天12點(diǎn)創(chuàng)建新文件 logger.add("file_3.log", rotation="1 week") # 文件時(shí)間過(guò)長(zhǎng)就會(huì)創(chuàng)建新文件 logger.add("file_4.log", retention="10 days") # 一段時(shí)間后會(huì)清空 logger.add("file_5.log", compression="zip") # 保存zip格式
3.4 更優(yōu)雅的字符串格式化輸出
Loguru庫(kù)對(duì)字符串的處理功能更加強(qiáng)大,字符串格式化輸出支持{} 來(lái)替換%,功能類似于str.format()
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
3.5 可以在線程或主線程中捕獲異常
我們經(jīng)常會(huì)遇到代碼出現(xiàn)crash時(shí),我們?cè)趌og里看不到任何錯(cuò)誤的信息。在Loguru庫(kù)中,可以通過(guò) @logger.catch 裝飾器來(lái)確保發(fā)生異常時(shí),將錯(cuò)誤信息保存下來(lái)。
示例如下:
@logger.catch def main(x, y, z): return x * y / z res = main(1,2,0) print(res)
3.6 可以支持自定義顏色
Loguru 是支持自定義顏色的,如果你不喜歡它默認(rèn)的顏色,可以這么改:
logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
3.7 支持異步,且線程和多進(jìn)程安全
Loguru 默認(rèn)情況下是線程安全的,但它不是多進(jìn)程安全的。不過(guò)如果你需要多進(jìn)程/異步記錄日志,它也能支持,只需要添加一個(gè) enqueue 參數(shù):
logger.add("somefile.log", enqueue=True)
3.8 支持異常完整性描述
對(duì)于日志而言,沒(méi)有錯(cuò)誤堆棧的日志是沒(méi)有靈魂的。Loguru 允許顯示整個(gè)堆棧信息來(lái)幫助你發(fā)現(xiàn)問(wèn)題(包括變量)。
logger.add("out.log", backtrace=True, diagnose=True) # Caution, may leak sensitive data in prod def func(a, b): return a / b def nested(c): try: func(5, c) except ZeroDivisionError: logger.exception("What?!") nested(0)
運(yùn)行結(jié)果如下:
3.9 更好的日期時(shí)間處理
我們可以自定義日期輸出樣式,如下所示:
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}") #定義日期樣式
3.10 支持郵件通知
Loguru 可以和強(qiáng)大的郵件通知模塊 notifiers 庫(kù)結(jié)合使用,以在程序意外失敗時(shí)接收電子郵件,或發(fā)送許多其他類型的通知。
import notifiers params = { "username": "you@gmail.com", "password": "abc123", "to": "dest@gmail.com" } # 初始化時(shí)發(fā)送一封郵件 notifier = notifiers.get_notifier("gmail") notifier.notify(message="The application is running!", **params) # 發(fā)生Error時(shí),發(fā)郵件進(jìn)行告警 from notifiers.logging import NotificationHandler handler = NotificationHandler("gmail", defaults=params) logger.add(handler, level="ERROR")
這樣配置之后,每次產(chǎn)生 Error 日志,程序都會(huì)自動(dòng)向你的郵箱發(fā)送告知郵件,真的是足夠人性化了。
四、總結(jié)
本文對(duì)Loguru庫(kù)相關(guān)主要特性進(jìn)行了簡(jiǎn)要概述,如果需要了解其更詳細(xì)的特性說(shuō)明,可參考官方github。
推薦大家在日常生活中多多使用Loguru庫(kù)進(jìn)行日志處理工作。
loguru官方網(wǎng)站: https://loguru.readthedocs.io/en/stable/index.html
api文檔: https://loguru.readthedocs.io/en/stable/api.html
項(xiàng)目地址:https://github.com/Delgan/loguru
到此這篇關(guān)于python優(yōu)秀第三方異步日志庫(kù)loguru介紹的文章就介紹到這了,更多相關(guān)python異步日志庫(kù)loguru內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(二):socket建立網(wǎng)絡(luò)客戶端
看了這一節(jié),突然之間對(duì)python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(1)中的一些不理解的問(wèn)題有了認(rèn)識(shí),至少明白了socket是怎么回事。這里關(guān)于socket的起源等問(wèn)題就不做筆記記錄了,直接進(jìn)入主題2014-06-06學(xué)習(xí)Python selenium自動(dòng)化網(wǎng)頁(yè)抓取器
本篇文章給大家介紹了Python selenium自動(dòng)化網(wǎng)頁(yè)抓取器的實(shí)例應(yīng)用以及知識(shí)點(diǎn)分析,有需要的參考學(xué)習(xí)下。2018-01-01python+Splinter實(shí)現(xiàn)12306搶票功能
這篇文章主要為大家詳細(xì)介紹了python+Splinter實(shí)現(xiàn)12306搶票功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09python中使用sys模板和logging模塊獲取行號(hào)和函數(shù)名的方法
這篇文章主要介紹了python中使用sys模板和logging模塊獲取行號(hào)和函數(shù)名的方法,需要的朋友可以參考下2014-04-04Python實(shí)現(xiàn)自動(dòng)化郵件發(fā)送過(guò)程詳解
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)自動(dòng)化郵件發(fā)送,可以讓你擺脫繁瑣的重復(fù)性業(yè)務(wù),可以節(jié)省非常多的時(shí)間。感興趣的小伙伴可以試一試2022-01-01PyTorch 遷移學(xué)習(xí)實(shí)戰(zhàn)
本文主要介紹了PyTorch 遷移學(xué)習(xí)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01SpringBoot調(diào)用python接口的實(shí)現(xiàn)步驟
本文主要介紹如何利用Springboot框架調(diào)用python腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12