Laravel 日誌系統(Logging)
Laravel 提供了強大的日誌功能,用於追蹤應用程式中的事件、錯誤與除錯資訊。日誌可依據需求寫入不同通道(channel),並設定不同的儲存方式與格式。
一、基本介紹
Laravel 使用 Monolog 套件作為日誌底層,並透過
config/logging.php 設定統一管理日誌通道與等級。
二、日誌通道設定(config/logging.php)
logging.php 設定檔中定義了所有可用的通道,Laravel 預設啟用 stack
通道,允許將多個通道堆疊起來一起寫入。
常見通道類型:
| 通道 |
說明 |
stack |
預設通道,可整合多個通道 |
single |
單一日誌檔案(預設為 storage/logs/laravel.log) |
daily |
每日產生日誌檔案,並保留指定天數 |
slack |
發送日誌訊息至 Slack(需設定 webhook) |
syslog / errorlog |
使用作業系統的 syslog/errorlog |
null |
忽略所有日誌訊息(測試用途) |
範例:daily 通道設定
driver: 使用的日誌處理方式
path: 儲存日誌檔的路徑
level: 最低紀錄等級(見下節)
days: 日誌保留天數
三、日誌等級(Level)
日誌級別依照嚴重程度從高到低排序如下:
等級用途對照:
| 等級 |
用途說明 |
emergency |
系統不可使用(例如:整個網站當機) |
alert |
必須立即處理(例如:資料庫失效) |
critical |
關鍵錯誤(例如:應用程式錯誤、無法處理請求) |
error |
一般錯誤(例如:例外、資源未找到) |
warning |
潛在錯誤警告(例如:磁碟空間即將不足) |
notice |
正常但重要事件(例如:使用者登入) |
info |
一般性訊息(例如:工作排程執行成功) |
debug |
除錯資訊,詳細描述系統內部狀態 |
注意:
Log 只會記錄等級高於或等於通道設定的等級之訊息。
四、寫入日誌
Laravel 提供簡潔的 Log facade 寫入日誌。
寫入預設通道(通常為 stack)
寫入指定通道
五、自訂通道與多通道堆疊
自訂通道範例
堆疊通道設定
六、其他補充
實用技巧:
- 可結合 Laravel Exception Handler,在
app/Exceptions/Handler.php 的
report() 方法中客製例外記錄方式。
七、常見應用實例
排程記錄執行狀況
例外報錯通知 Slack
參考文件
Laravel 日誌系統(Logging)
Laravel 提供了強大的日誌功能,用於追蹤應用程式中的事件、錯誤與除錯資訊。日誌可依據需求寫入不同通道(channel),並設定不同的儲存方式與格式。
一、基本介紹
Laravel 使用 Monolog 套件作為日誌底層,並透過
config/logging.php設定統一管理日誌通道與等級。二、日誌通道設定(config/logging.php)
logging.php設定檔中定義了所有可用的通道,Laravel 預設啟用stack通道,允許將多個通道堆疊起來一起寫入。常見通道類型:
stacksinglestorage/logs/laravel.log)dailyslacksyslog/errorlognull範例:
daily通道設定'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, ],driver: 使用的日誌處理方式path: 儲存日誌檔的路徑level: 最低紀錄等級(見下節)days: 日誌保留天數三、日誌等級(Level)
日誌級別依照嚴重程度從高到低排序如下:
等級用途對照:
emergencyalertcriticalerrorwarningnoticeinfodebug注意:
Log 只會記錄等級高於或等於通道設定的等級之訊息。
四、寫入日誌
Laravel 提供簡潔的
Logfacade 寫入日誌。寫入預設通道(通常為 stack)
use Illuminate\Support\Facades\Log; Log::error('發生錯誤'); Log::info('用戶登入', ['user_id' => 123]);寫入指定通道
Log::channel('slack')->alert('系統異常,請即時處理!'); Log::channel('daily')->debug('除錯訊息');五、自訂通道與多通道堆疊
自訂通道範例
'custom' => [ 'driver' => 'single', 'path' => storage_path('logs/custom.log'), 'level' => 'info', ],堆疊通道設定
'stack' => [ 'driver' => 'stack', 'channels' => ['daily', 'slack'], 'ignore_exceptions' => false, ],六、其他補充
實用技巧:
.env檔案切換通道或等級:LOG_CHANNEL=daily LOG_LEVEL=warningcontext附帶額外資訊:Log::info('訂單已建立', ['order_id' => 1001, 'amount' => 599]);app/Exceptions/Handler.php的report()方法中客製例外記錄方式。七、常見應用實例
排程記錄執行狀況
Log::channel('daily')->info('排程開始執行:SendEmailJob');例外報錯通知 Slack
Log::channel('slack')->critical('付款失敗', ['order_id' => 1001]);參考文件