網站首頁 編程語言 正文
一、引言
在編寫調試Python代碼過程中,我們經常需要記錄日志,通常我們會采用python自帶的內置標準庫logging,但是使用該庫,配置較為繁瑣。為了提升編程效率,本文重點介紹最近發現的一個寶藏第三方日志庫Loguru,該庫名字來自于印度語,含義為日志大師。
我們先來做個直觀的對比,來說明Loguru的優雅之處。使用python自帶的logging,樣例代碼如下:
樣例輸出如下:
使用Loguru庫,樣例代碼如下:
使用Loguru輸出日志,終端執行后出現帶顏色的日志,而且使用超級方便。
二、安裝loguru
直接使用pip進行安裝即可,命令如下:
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庫豐富的特性,這里挑選幾個重要的特性進行講解
3.1 開箱即用
Loguru庫設計的初衷就在于追求有且僅有一個logger,為了使用方便,提前預置輸出樣式。如果需要打印日志僅需采取如下方式:
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
3.2 無需初始化,導入函數即可使用
在Loguru中,我們如何自定義輸出樣式?如何過濾輸出信息?如何設置日志級別?
答案是調用 add() 函數
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,結果如下:
3.3 更容易的文件日志記錄與轉存/保留/壓縮方式
我們可以通過簡單的配置,來讓日志保存更加人性化。比如我們想要刪除老的日志,或者我們希望自動壓縮保存好的日志,可以參考一下命令:
logger.add("file_1.log", rotation="500 MB") # 文件過大(超過500M)就會重新生成一個文件
logger.add("file_2.log", rotation="12:00") # 每天12點創建新文件
logger.add("file_3.log", rotation="1 week") # 文件時間過長就會創建新文件
logger.add("file_4.log", retention="10 days") # 一段時間后會清空
logger.add("file_5.log", compression="zip") # 保存zip格式
3.4 更優雅的字符串格式化輸出
Loguru庫對字符串的處理功能更加強大,字符串格式化輸出支持{} 來替換%,功能類似于str.format()
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
3.5 可以在線程或主線程中捕獲異常
我們經常會遇到代碼出現crash時,我們在log里看不到任何錯誤的信息。在Loguru庫中,可以通過 @logger.catch 裝飾器來確保發生異常時,將錯誤信息保存下來。
示例如下:
@logger.catch
def main(x, y, z):
return x * y / z
res = main(1,2,0)
print(res)
3.6 可以支持自定義顏色
Loguru 是支持自定義顏色的,如果你不喜歡它默認的顏色,可以這么改:
logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
3.7 支持異步,且線程和多進程安全
Loguru 默認情況下是線程安全的,但它不是多進程安全的。不過如果你需要多進程/異步記錄日志,它也能支持,只需要添加一個 enqueue 參數:
logger.add("somefile.log", enqueue=True)
3.8 支持異常完整性描述
對于日志而言,沒有錯誤堆棧的日志是沒有靈魂的。Loguru 允許顯示整個堆棧信息來幫助你發現問題(包括變量)。
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)
運行結果如下:
3.9 更好的日期時間處理
我們可以自定義日期輸出樣式,如下所示:
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}") #定義日期樣式
3.10 支持郵件通知
Loguru 可以和強大的郵件通知模塊 notifiers 庫結合使用,以在程序意外失敗時接收電子郵件,或發送許多其他類型的通知。
import notifiers
params = {
"username": "you@gmail.com",
"password": "abc123",
"to": "dest@gmail.com"
}
# 初始化時發送一封郵件
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)
# 發生Error時,發郵件進行告警
from notifiers.logging import NotificationHandler
handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")
這樣配置之后,每次產生 Error 日志,程序都會自動向你的郵箱發送告知郵件,真的是足夠人性化了。
四、總結
本文對Loguru庫相關主要特性進行了簡要概述,如果需要了解其更詳細的特性說明,可參考官方github。
推薦大家在日常生活中多多使用Loguru庫進行日志處理工作。
loguru官方網站: https://loguru.readthedocs.io/en/stable/index.html
api文檔: https://loguru.readthedocs.io/en/stable/api.html
項目地址:https://github.com/Delgan/loguru
原文鏈接:https://blog.csdn.net/hubing_hust/article/details/128402860
相關推薦
- 2022-08-12 Linux?中ls命令的使用詳細介紹_linux shell
- 2022-07-08 一文教會你用Docker打包Python運行環境_docker
- 2023-10-27 解決webpack打包后圖片加載失敗的bug(適用于所有本地靜態資源)
- 2022-05-28 解決tomcat啟動?ssm項目出現亂碼的問題_Tomcat
- 2022-10-30 Android?Studio調試Gradle插件詳情_Android
- 2022-09-26 SharedPreferences存儲HashMap和相互轉化
- 2023-04-18 MongoDB超大塊數據問題解決_MongoDB
- 2022-02-04 Hive在內存不足以存儲所有數據時,會使用外存,而Impala也是如此:錯
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支