Linux環境下Laravel日志管理技巧
Laravel默認將日志文件存儲在項目根目錄的storage/logs
文件夾中(如laravel.log
或按日期分割的文件,如laravel-2025-09-23.log
)。通過SSH連接到服務器后,可使用cd /path/to/your/laravel-project/storage/logs
進入該目錄,使用ls -l
查看日志文件列表。
Laravel支持8種日志級別(從低到高依次為debug
、info
、notice
、warning
、error
、critical
、alert
、emergency
),可根據需求調整記錄的日志詳細程度。
.env
文件,設置LOG_LEVEL
參數(如LOG_LEVEL=error
僅記錄錯誤及以上級別日志);config/logging.php
文件,修改default
字段或對應通道的level
選項(如將daily
通道的level
設為warning
)。為避免日志文件無限膨脹占用磁盤空間,推薦使用Linux系統自帶的logrotate
工具實現自動輪轉。
/etc/logrotate.d/
目錄下新建laravel
文件,添加以下內容(需替換/path/to/your/laravel
為實際項目路徑):/path/to/your/laravel/storage/logs/*.log {
daily # 每天輪轉一次
missingok # 若日志文件不存在也不報錯
rotate 14 # 保留最近14天的日志
compress # 壓縮舊日志(節省空間)
notifempty # 若日志為空則不輪轉
create 640 www-data adm # 創建新日志文件并設置權限(根據實際Web用戶調整,如www-data、nginx等)
}
sudo logrotate -vf /etc/logrotate.d/laravel
驗證配置是否生效。通過Laravel提供的Log
門面,可在代碼中便捷記錄不同級別的日志,便于后續排查問題。常用方法如下:
use Illuminate\Support\Facades\Log;
// 記錄信息日志(用于調試常規流程)
Log::info('用戶登錄成功', ['user_id' => 1, 'ip' => request()->ip()]);
// 記錄錯誤日志(用于捕獲異常)
try {
// 業務邏輯
} catch (\Exception $e) {
Log::error('訂單創建失敗', ['exception' => $e, 'order_data' => $orderData]);
}
// 記錄警告日志(用于提示潛在問題)
Log::warning('庫存不足', ['product_id' => 101, 'stock' => 5]);
日志會自動寫入當前配置的通道(如daily
或single
)。
對于需要集中管理、實時監控或高級分析的場景,可集成第三方日志工具,提升管理效率:
config/logging.php
中添加對應通道(如Papertrail的syslog
通道),并配置API密鑰和端點。確保storage/logs
目錄及日志文件具有正確的權限,避免因權限問題導致日志無法寫入。
chmod -R 755 storage/logs
(使所有者可讀寫執行,其他用戶可讀執行);chmod 640 storage/logs/*.log
(使所有者可讀寫,所屬組可讀,其他用戶無權限);www-data
,可執行chown -R www-data:www-data storage/logs
(將目錄及文件所有者設為www-data
)。tail
命令實時查看日志文件的最新內容(如tail -f storage/logs/laravel.log
),便于快速定位線上問題;php artisan log:clear
清除所有舊日志文件(僅保留最新日志,具體取決于config/logging.php
中的days
配置);0 0 * * * find /path/to/your/laravel/storage/logs -type f -name "*.log" -mtime +7 -exec rm {} \;
(該命令每天0點執行,刪除storage/logs
目錄下超過7天的.log
文件)。若需更靈活的日志管理(如將日志寫入不同文件、數據庫或遠程服務),可在config/logging.php
中自定義通道。例如,添加一個orders
通道用于記錄訂單相關日志:
'channels' => [
'orders' => [
'driver' => 'daily', // 按天輪轉
'path' => storage_path('logs/orders.log'), // 日志文件路徑
'level' => 'info', // 記錄info及以上級別日志
'days' => 30, // 保留30天日志
],
],
使用時通過指定通道記錄日志:Log::channel('orders')->info('訂單支付成功', ['order_id' => 202]);
。