Skip to main content

日誌是什麼

Laravel 的日誌以**通道(channel)**為核心概念設計。 通道是定義了日誌寫入位置與方式的設定單位,可組合檔案、Slack、syslog 等多種輸出目的地。 其內部使用 Monolog 函式庫,可利用豐富的 handler 與 formatter。
預設會使用 stack 通道。stack 是可統整多個通道的父通道。

設定

日誌設定集中於 config/logging.php。可透過環境變數 LOG_CHANNEL 切換預設通道。

可用的通道驅動

日誌等級

Laravel 支援 RFC 5424 定義的 8 個日誌等級。 以嚴重度由高至低排列。 通道的 level 設定代表最低日誌等級。 例如 levelerror 時,僅會寫入 error 及以上等級(criticalalertemergency)。

基本用法

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
正式環境中建議 slack 通道的等級設為 errorcritical。 若把輕微的日誌都送到 Slack,通知會過量、掩蓋掉重要警報。

daily 通道 — 日誌循環

daily 通道會依日期分檔,並自動刪除舊檔。
days 太小會使舊日誌被過早刪除。 為了正式環境的故障調查,請保留足夠期間。

錯誤通知到 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 擴充。

安裝

基本用法

日誌過濾

總結

  • 開發環境:使用 singledaily 寫入檔案
  • 正式環境:以 stack 結合 daily(檔案保存)與 slack(錯誤通知)
  • 特定處理的日誌:以 Log::build() 建立隨用即建通道寫入獨立檔案
  • 即時監控:以 php artisan pail 從終端機查看
  • debug 日誌可能包含機密資訊。正式環境建議 LOG_LEVEL=error 以上。
  • 請定期輪換日誌檔避免磁碟爆滿(daily 通道的 days 設定)。
  • 傳送到 Slack 等外部服務時請注意速率限制。應設定等級只通知重大錯誤。
最後修改於 2026年8月2日