iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
ChatGPT & Codex

窮鬼冰箱升級計劃系列 第 27 篇

【Day 27】beggarFridge 的 Logging 與 Troubleshooting 機制

  • 分享至 

  • xImage
  •  

前言

當前系統已經涵蓋了多項功能,例如在樹莓派上的算力、記憶體、儲存的消耗。 在裝置之間的流量進出,透過 API (FastAPI) 進行的操作,資料庫,以及其他的周邊硬體。

CPU / RAM / Disk
Network
FastAPI
SQLite
ESP32
Meshtastic

在系統發生異常時,希望透過 log 進行錯誤排查,就有賴於程式一邊運行一邊留下的記號。

在開發的過程中,常見用 print() 方式直接輸出字串到螢幕,對於單一檔案的程式碼來說還勉強可以搜尋看看字串從哪邊吐出,頂多就是確定剛剛踩過某幾行程式碼,最後不知道怎麼死的,然後猜想可能造成失敗的原因。 但在系統龐大到很難用搜尋的方式追查後,就該思考應該在 log 中記錄些有用的訊息了!

Log 期望內容

  1. 時戳
  2. 事件等級
  3. 元件
  4. 詳細訊息

Logging

import logging


logging.basicConfig(
    level=logging.INFO,
    format=(
        "%(asctime)s "
        "%(levelname)s "
        "%(name)s "
        "%(message)s"
    ),
)

logger = logging.getLogger(
    "beggarFridge"
)

Goal

 ESP32
   │
   │ Device Events
   ▼
FastAPI ───────────────┐
   │                   │
BarcodeService         │
AMISProvider            │
NotificationService     │
NetworkMonitor          │
MeshtasticService       │
   │                   │
   └──────────┬────────┘
              ▼
         Logging Layer
              │
      ┌───────┴────────┐
      ▼                ▼
 journalctl      Rotating Log
      │                │
      └───────┬────────┘
              ▼
       Troubleshooting
              │
       ┌──────┴──────┐
       ▼             ▼
Recent Events      Runbook
       │
       ▼
System Dashboard

上一篇
【Day 26】System Health Dashboard
下一篇
【Day 28】beggarFridge 的 Backup & Recovery
系列文
窮鬼冰箱升級計劃 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言