更優雅的 Python Log - Loguru
前言
剛開始自學程式的時候,總想著用 print
大法一招打天下 (謎之聲:簡單方便又能用,跟 log
比起來不香嗎((誤
一直到最近幾次做有一定規模的專案時,才深刻理解到 print 的不足:很難被 traceback。 舉例而言,當用戶遇到 bug 的時候,埋 print 的情況就必須慢慢逐一檢查所有 print 的訊息,像是大海撈針一般,好不容易找到 print error 後還要再花上大半時間解 bug;相反地,若是使用 log 做記錄,我們可以快速篩選出發生的錯誤訊息,大幅降低定位 bug 所需的時間與精力,甚至是某些紀錄我們希望能被紀錄起來待日後進行其他運用,這些都是 print 所沒辦法達到的好處。
雖然 log 聽起來很好用, Python3 也有內建 logging
函式庫,但就新手的角度而言 log 是非常麻煩的作業且具有一定門檻 - handler, formatter, filter… 這讓很多人最後還是回頭用 print。 而我們今天要介紹的 Loguru
便是主打著 Python logging made (stupidly) simple
的名號,號稱簡單又容易上手,GitHub 上也有著 9300 多個 star!
Loguru 教學 - 安裝
官方推薦的安裝方法是使用 pip install loguru
,亦可參考 PyPi Loguru
1 | pip install loguru |
Loguru 教學 - 基礎
Loguru 主打簡單易上手的 logging,只需從 loguru 中 import logger 就 ok!
1 | from loguru import logger |
你沒看錯,就是這麼簡單!
Loguru 教學 - 進階
除了基本功能外,Loguru 亦提供了豐富的功能支援,以下將簡介其中幾項較常見的功能。 這些功能並非只能單獨使用,若需多項功能只要將各參數分別放至 add
函式中即可~
儲存 Log 檔案
若更進一步希望能儲存 log 至檔案中, Loguru 也有提供相關功能
1 | logger.add("logs/file_{time}.log") |
Log 輪替 (Log rotate) & 壓縮 (Compression)
除此之外,Loguru 也支持 Log 輪替 (Log rotate) 和 壓縮 (Compression) 功能
1 | logger.add("logs/file_{time}.log", rotate="12:00") |
rotate 的詳細用法可以參考 Loguru docs - rotate 文件,除了依照 時間
、 週期
外也能根據 檔案大小
輪替
異步 Logging
Loguru 亦支持透過 async 的方式紀錄 Log
1 | logger.add("logs/file_{time}.log", enqueue=True) |
序列化
serialize
會先將內容在儲存至 Log 前先轉換為 JSON 結構
1 | logger.add("logs/file_{time}.log", serialize=True) |
文字編碼
若 Log 中有包含中文字元,記得要先設定 encoding 為 utf-8
1 | logger.add("logs/file_{time}.log", encoding="utf-8") |
Loguru 還有很多其他實用的功能,不妨去玩玩喔~
References
如果您喜歡我的文章,歡迎幫我在下面按5下讚!感謝您的鼓勵和支持!