2023年7月13日

Laravel 如何自訂 Log 路徑?使用 Log::build 建立 Laravel Logger 並設定動態路徑

Laravel 有預設的 Logger,可以透過 logging config 設定,滿足大部分情況的需求。

不過有些時候難免還是會需要動態的使用 logger,尤其是需要動態產生 logger 的寫入路徑,這個時候就需要用別的方式了。

Laravel 的 Log 提供一個 build 的方法,讓開發者可以自己定義 logger,如果要建立一個動態的 logger,並寫入指定路徑,可以參考以下範例:

use Illuminate\Support\Facades\Log;

$path = '...';

$logger = Log::build([
  'driver' => 'single',
  'path' => $path
]);

在上面的範例中, driver 使用 singlesingle 代表使用單一檔案,可搭配 path 使用。$path 可以是任意路徑,根據實際需求來即時計算產生。

例如:

// 根據目前日期
$path = storage_path('logs/test_'.date('Ymd').'.log'),

// 根據使用者id
$path = storage_path('logs/test_'.$request->user()->id.'.log'),/

那這樣產生的 logger 其實用法就跟一般的 logger 一樣,直接呼叫就好了:

$logger->info("Info Logger!");
$logger->warn("Warn Logger!");

沒意外的話,應該可以在 path 指定的路經中找到 log。

參考

https://laravel.com/docs/10.x/logging

【Larave學習書籍】 Laravel 啟動與運行(第二版)