前言

剛開始自學程式的時候,總想著用 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
2
3
from loguru import logger

logger.debug("That's it, beautiful and simple logging!")

你沒看錯,就是這麼簡單!

Loguru 教學 - 進階

除了基本功能外,Loguru 亦提供了豐富的功能支援,以下將簡介其中幾項較常見的功能。 這些功能並非只能單獨使用,若需多項功能只要將各參數分別放至 add 函式中即可~

儲存 Log 檔案

若更進一步希望能儲存 log 至檔案中, Loguru 也有提供相關功能

1
logger.add("logs/file_{time}.log")

Log 輪替 (Log rotate) & 壓縮 (Compression)

除此之外,Loguru 也支持 Log 輪替 (Log rotate) 和 壓縮 (Compression) 功能

1
2
logger.add("logs/file_{time}.log", rotate="12:00")
logger.add("logs/file_{time}.log", compression="zip")

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