今天簡單點、輕鬆一點。
接下來讓我來介紹一下關於 Laravel 的 Log 功能,有時候我們會需要使用到紀錄的功能,需要知道這個 request 到底發了哪些東西,這樣才能方便我們追蹤我們寫的程式與網頁
Laravel 的 logs 其實都放在storage/logs
這個資料夾當中,你會發現有很多以 Laravel 為前綴並且加入date
的.log
檔,如果沒有可能剛好只是你的目前的 log 等級還沒有到那裡(預設是 error,也就是有錯誤的時候才會放進去 log 檔裡面)
其實要弄 log 非常得簡單,使用Log
這個類別即可完成~現在讓我們以之前創建文章的那裡作為範例,首先先去ArticleController.php
這個檔案裡面
use Log;
....(略)
public function store(Request $request)
{
Log::info('Hi 我們的第一個Log訊息');
$title = $request->title;
$content = $request->content;
$article = new Article();
$article->title = $title;
$article->content = $content;
$article->save();
return redirect(route('article.index'));
}
當你新增文章之後,你去到最新日期的.log 檔,就會看到一行「Hi 我們的第一個 Log 訊息」囉!
其實 Laravl 提供我們很多有關於 Log 的設定,其實我們可以跑到config/logging.php
裡面,其實就記載了許多不少的設定,順便補充說明一下env()
這個方法,他其實就是在讀取.env 檔的設定喔,所以當我們回來看到.env 檔會看到一行
LOG_CHANNEL=stack
為什麼 Laravel 預設 log 都是加入日期,然後一個日期一個日期紀錄呢?能不能統一紀錄同一個?
Laravel 聽到你的心聲囉,讓我們把.env 裡面LOG_CHANNEL
從stack
改為single
,其實再一次新增文章之後,你就發現我們的 log 檔就多了一個名叫laravel.log
的檔案啦!
接下來我們來玩一個極有趣的功能,就是讓 log 跑到 slack 上面,其實非常簡單,Laravel 早就幫我們準備好了,總之就是在.env 檔案裡面增加一行
LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxxx
這個LOG_SLACK_WEBHOOK_URL
請自行去這裏自行加入到自己的 workspace 來找囉!
然後要去一下config/logging.php
修改一下 slack 的 log level,把他從原本預設的critical
改為debug
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel-Bot',
'emoji' => ':boom:',
'level' => 'debug',
],
之後測試一下新增文章,就會在 slack 找到訊息呢!
如果想要更加使用 log 功能的可以看看以下參考資料:
要看完整程式碼的可以參考這裡:https://github.com/r567tw/Make-PHP-Great-Again/commit/dd0466752a79040420427981c94fc22a9e7189c2
學習了!! 感謝您
補充幾點,自己在串接 Lumen & Slack 時遇到的問題
.env
這邊要先改成 LOG_CHANNEL=slack
Slack 要選擇到自己想要的那個 workspace
(( 如圖
在 Lumen 中,若要修改 Slack 的 log level,需要進到 vendor\laravel\lumen-framework\config\logging.php
(( 但不推薦,因為這是直接修改 vendor
裡面的檔案
由於跟 Slack 溝通時會用到 cURL
連 https
,所以需要在 php.ini
設定 curl.cainfo
(( 參考
如果想要同時使用多個 LOG_CHANNEL
(ex. daily
& slack
)
.env
這邊要改回 LOG_CHANNEL=stack
vendor\laravel\lumen-framework\config\logging.php
這邊要改成如下圖PS.