iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
2
Modern Web

讓PHP再次偉大,使用Laravel系列 第 18

Laravel Error and Logging

今天簡單點、輕鬆一點。

接下來讓我來介紹一下關於 Laravel 的 Log 功能,有時候我們會需要使用到紀錄的功能,需要知道這個 request 到底發了哪些東西,這樣才能方便我們追蹤我們寫的程式與網頁

Laravel 的 logs 其實都放在storage/logs這個資料夾當中,你會發現有很多以 Laravel 為前綴並且加入date.log檔,如果沒有可能剛好只是你的目前的 log 等級還沒有到那裡(預設是 error,也就是有錯誤的時候才會放進去 log 檔裡面)

https://ithelp.ithome.com.tw/upload/images/20191003/20106999TkOYLOljXr.png

其實要弄 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 訊息」囉!
https://ithelp.ithome.com.tw/upload/images/20191003/20106999mKc259AE6x.png

設定 Log 的設定

其實 Laravl 提供我們很多有關於 Log 的設定,其實我們可以跑到config/logging.php裡面,其實就記載了許多不少的設定,順便補充說明一下env()這個方法,他其實就是在讀取.env 檔的設定喔,所以當我們回來看到.env 檔會看到一行

LOG_CHANNEL=stack

為什麼 Laravel 預設 log 都是加入日期,然後一個日期一個日期紀錄呢?能不能統一紀錄同一個?

Laravel 聽到你的心聲囉,讓我們把.env 裡面LOG_CHANNELstack改為single,其實再一次新增文章之後,你就發現我們的 log 檔就多了一個名叫laravel.log的檔案啦!
https://ithelp.ithome.com.tw/upload/images/20191003/201069999lzk4Jv6B6.png

Log 到 Slack

接下來我們來玩一個極有趣的功能,就是讓 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 找到訊息呢!
https://ithelp.ithome.com.tw/upload/images/20191003/201069998R0HHedUUk.png

如果想要更加使用 log 功能的可以看看以下參考資料:

要看完整程式碼的可以參考這裡:https://github.com/r567tw/Make-PHP-Great-Again/commit/dd0466752a79040420427981c94fc22a9e7189c2


上一篇
Laravel Validation
下一篇
Laravel Eloquent ORM-(上)
系列文
讓PHP再次偉大,使用Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Ho.Chun
iT邦新手 5 級 ‧ 2021-04-13 17:04:50

學習了!! 感謝您 /images/emoticon/emoticon41.gif


補充幾點,自己在串接 Lumen & Slack 時遇到的問題

  1. .env 這邊要先改成 LOG_CHANNEL=slack

  2. Slack 要選擇到自己想要的那個 workspace (( 如圖
    https://ithelp.ithome.com.tw/upload/images/20210413/20106955S6BamH0da5.png

  3. 在 Lumen 中,若要修改 Slack 的 log level,需要進到 vendor\laravel\lumen-framework\config\logging.php (( 但不推薦,因為這是直接修改 vendor 裡面的檔案

  4. 由於跟 Slack 溝通時會用到 cURLhttps,所以需要在 php.ini 設定 curl.cainfo (( 參考

  5. 如果想要同時使用多個 LOG_CHANNEL (ex. daily & slack)

  • .env 這邊要改回 LOG_CHANNEL=stack
  • vendor\laravel\lumen-framework\config\logging.php 這邊要改成如下圖
    https://ithelp.ithome.com.tw/upload/images/20210413/20106955bgrujB8xQz.png

PS.

我要留言

立即登入留言