日誌是什麼
Laravel 的日誌以**通道(channel)**為核心概念設計。 通道是定義了日誌寫入位置與方式的設定單位,可組合檔案、Slack、syslog 等多種輸出目的地。 其內部使用 Monolog 函式庫,可利用豐富的 handler 與 formatter。預設會使用
stack 通道。stack 是可統整多個通道的父通道。設定
日誌設定集中於config/logging.php。可透過環境變數 LOG_CHANNEL 切換預設通道。
可用的通道驅動
日誌等級
Laravel 支援 RFC 5424 定義的 8 個日誌等級。 以嚴重度由高至低排列。
通道的
level 設定代表最低日誌等級。
例如 level 為 error 時,僅會寫入 error 及以上等級(critical、alert、emergency)。
基本用法
Log Facade
透過Illuminate\Support\Facades\Log Facade 撰寫各等級的訊息。
log() 輔助函式
用log() 輔助函式不必 import Log Facade 也能使用。
附加脈絡(context)
將訊息與陣列的脈絡一併傳入,可統整記錄相關資訊。withContext() — 對整個通道加上共通脈絡
若想對特定通道之後所有日誌都附上共通資訊,可以用withContext()。
適合用來附上像 request ID 這樣要出現在所有日誌的資訊。
shareContext() — 對所有通道加上共通脈絡
withContext() 只作用於目標通道,shareContext() 則對所有通道加上共通脈絡。
通道設定
stack 通道 — 同時寫入多個通道
使用stack 通道,可以在一次日誌呼叫中同時寫入多個通道。
debug 以上皆寫入 daily(檔案),僅 critical 以上會另外傳到 slack。
daily 通道 — 日誌循環
daily 通道會依日期分檔,並自動刪除舊檔。
錯誤通知到 Slack
取得 Slack 的 Incoming Webhook URL,並設定到.env。
slack 加入 stack,並設定 LOG_CHANNEL=stack,錯誤發生時就會自動通知。
寫入特定通道
以Log::channel() 明確指定目標通道。
隨用即建的通道
透過Log::build(),不必在設定檔中定義,也可即時建立自訂通道。
適合測試或臨時輸出目的地。
實用範例
於中介軟體加上 request ID
為所有日誌加上共通的 request ID,可讓你更容易追蹤特定請求的流程。1
建立中介軟體
2
實作 handle() 方法
3
註冊中介軟體
在
bootstrap/app.php 註冊為全域中介軟體。request-id。
記錄不建議使用的警告
可將使用 PHP 或 Laravel 不建議功能時的警告記錄到日誌。.env 指定通道:
Laravel Pail — 即時日誌監控
Laravel Pail 是一款可在終端機即時查看應用程式日誌的開發工具。與一般tail 不同,它設計上可搭配包含 Laravel Nightwatch、Sentry、Flare 在內的所有日誌驅動運作。
執行 Pail 需要 PHP 的 PCNTL 擴充。
安裝
基本用法
日誌過濾
總結
日誌等級的選擇
日誌等級的選擇
通道選擇指南
通道選擇指南
- 開發環境:使用
single或daily寫入檔案 - 正式環境:以
stack結合daily(檔案保存)與slack(錯誤通知) - 特定處理的日誌:以
Log::build()建立隨用即建通道寫入獨立檔案 - 即時監控:以
php artisan pail從終端機查看
正式環境注意事項
正式環境注意事項
debug日誌可能包含機密資訊。正式環境建議LOG_LEVEL=error以上。- 請定期輪換日誌檔避免磁碟爆滿(
daily通道的days設定)。 - 傳送到 Slack 等外部服務時請注意速率限制。應設定等級只通知重大錯誤。