
如果要追求極簡,可以直接捨棄時間戳記,只留下等級名稱與訊息。這樣在開發階段閱讀起來負擔最輕。你可以參考這個格式:
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.DefaultFormatter和uvicorn.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),且格式極其精簡。
