python logging 高亮實作

如果要追求極簡,可以直接捨棄時間戳記,只留下等級名稱與訊息。這樣在開發階段閱讀起來負擔最輕。你可以參考這個格式:

logging.basicConfig(level=logging.INFO, format='%(levelname).1s: %(message)s')

這個設定會把等級縮寫成一個字,例如 INFO 會變成 I,WARNING 變成 W。輸出的內容會像 I: 這是一條訊息


使用 Rich 實作高亮顯示

內建的 logging 模組沒辦法直接輸出彩色文字。最推薦的方法是安裝 rich 套件。它能自動幫日誌加上顏色,而且格式非常漂亮。

首先在終端機安裝:

pip install rich

接著在程式碼中這樣設定:

Python

import logging
from rich.logging import RichHandler

logging.basicConfig(
    level=logging.INFO,
    format="%(message)s",
    handlers=[RichHandler(show_time=False, show_path=False, markup=True)]
)

log = logging.getLogger("rich")
log.info("這是高亮顯示的訊息")

使用 Loguru 替代方案

如果你不想要複雜的設定,loguru 是另一個很好的選擇。它預設就有漂亮的顏色,且語法非常直覺。

安裝指令:

pip install loguru

使用方式:

Python

from loguru import logger
import sys

# 移除預設設定並自訂簡短格式
logger.remove()
logger.add(sys.stderr, format="<level>{level: <8}</level> | <level>{message}</level>", colorize=True)

logger.info("這是一條有顏色的簡短日誌")

這樣設定後,等級部分會根據嚴重程度顯示不同顏色,訊息本身也會變得容易辨識。


Uvicorn 的高亮實作

Uvicorn 本身並沒有使用像 Rich 或 Loguru 這樣的大型第三方高亮套件。它在內部實作了一套簡易的格式化類別。


核心原理與套件

Uvicorn 主要透過以下方式實現高亮:

  • 內建 Formatter:它自定義了 uvicorn.logging.DefaultFormatteruvicorn.logging.AccessFormatter,這兩個類別會負責處理顏色輸出。
  • ANSI 轉義碼:它直接使用 ANSI 顏色碼(如 \x1b[32m 代表綠色)來渲染等級標籤。
  • Colorama (Windows 專用):在 Windows 系統上,為了讓終端機能正確顯示顏色,Uvicorn 會依賴 colorama 套件來處理 ANSI 碼的相容性。

模仿 Uvicorn 的極簡高亮格式

如果你想要模仿 Uvicorn 那種簡短且帶有顏色的風格,但不想引入重型套件,可以參考它的邏輯來寫一個簡單的 Formatter

Python

import logging

class SimpleColorFormatter(logging.Formatter):
    # 定義顏色碼
    COLORS = {
        'INFO': "\x1b[32mINFO\x1b[0m",
        'WARNING': "\x1b[33mWARNING\x1b[0m",
        'ERROR': "\x1b[31mERROR\x1b[0m",
        'DEBUG': "\x1b[36mDEBUG\x1b[0m",
    }

    def format(self, record):
        level_name = self.COLORS.get(record.levelname, record.levelname)
        return f"{level_name}: {record.getMessage()}"

# 套用設定
handler = logging.StreamHandler()
handler.setFormatter(SimpleColorFormatter())
logging.getLogger().addHandler(handler)
logging.getLogger().setLevel(logging.INFO)

logging.info("這是仿 Uvicorn 風格的高亮訊息")

這段程式碼完全不依賴額外套件(除了 Windows 可能需要 pip install colorama),且格式極其精簡。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *