cover

Log 架構流程圖

為什麼需要 Log?

一般系統運作來說,我們都會做系統監控,用來做後續告警維護等機制。監控可分為兩種:

類型說明範例
主動式監控系統設計者主動提供可監控的資訊(Log)自定義的 access log
被動式監控由外部系統來監控服務運作狀況APM 系統、Stack Driver

兩種方式沒有對錯,選擇取決於現有系統狀態與團隊熟悉的工具。

Log 欄位設計

建議格式

[{DATETIME}] {APP_ENV}.{LEVEL}: {TYPE} {IP} {TIMESTAMP} {METHOD} {REQUEST_URI} {PAYLOAD} {HEADER} {IDENTIFIER}

欄位說明

欄位說明
DATETIME日期時間
APP_ENV環境(staging/production)
LEVEL等級(INFO/ERROR/WARNING)
TYPERequest 或 Response
IP來源 IP
TIMESTAMPUnix 時間戳
METHODHTTP Method
REQUEST_URI請求路徑
IDENTIFIER使用者識別

在 Laravel 中實作

Laravel 的 middleware 設計讓所有 request/response 都會經過,適合在此加入 Log 功能。

常見查詢情境

1. 查看使用者歷程

透過 timestamp 追蹤同一時間的所有請求:

grep 1682394555 middleware_access-2023-04-25.log | awk '{print $1" "$2" "$3" "$6" - "$7" - "$8}'

2. 統計 API 使用次數

grep /api/sale-property/search-meta middleware_access-2023-04-25.log | wc -l

3. 統計註冊人數

# 總數
grep register *.log | wc -l
 
# 細項
grep register *.log | awk '{print $1" "$2" "$3" "$6" - "$7" - "$8}'

4. 統計錯誤次數

# 總數
grep ERROR middleware_access-2023-04-25.log | wc -l
 
# 細項
grep ERROR middleware_access-2023-04-25.log | awk '{print $1" "$2" "$3" "$6" - "$7" - "$8" - "$10}'

後續優化方向

維運相關

  • 災害演練機制
  • 告警系統建置
  • 文件整理

Log 設計相關

  • 確認檔案生成週期(daily 或其他)
  • 過期資料處理與備份機制
  • 欄位格式優化

Proto 實踐對照

Log 設計在 Proto Django (B2E) 專案中扮演核心角色。Django 的 middleware 機制是掛載 request/response log 的最佳位置——每個請求進出都會經過 middleware,不需要在個別 view 中重複撰寫 log 邏輯。

Proto 的 Log 設計遵循四層原則:request log(記錄進入的請求)、response log(記錄回傳結果)、error log(捕捉例外與錯誤)、query log(追蹤資料庫查詢效能)。這四層搭配起來,能完整還原任何一次 API 呼叫的全貌。

Proto 的 Log 設計不只是記錄,還要能串接到監控系統(Grafana/ELK)。

相關文章:


延伸閱讀