iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
2
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 30

Day30 laravel Log 紀錄request,response

Day30 laravel Log 紀錄request,response

歷經千辛萬苦終於來到鐵人賽第30天,今天來用用laravel的Log功能,log再debug時候蠻重要的,利用middleware功能,可以使用Log看到request和response的內容可以拿來跟前端吵架用,可以清楚的知道錯的是前端還是後端。

設定Log

log設定檔放在config/logging.php內,裏面有許多channel可以選擇,laravel預設使用stack channel,若要更改log模式,可以參考官網,我這邊先直接使用預設值。log會儲存在storage/logs/laravel.log

使用middleware

我希望所有request和response都紀錄下來,可以使用之前講過的after,before middleware,然後在Kernel.php註冊在全域使用,這樣就可以紀錄每一筆輸入和輸出了。

可以參考我之前的middleware文章Day15 laravel middleware篇

使用log

要使用log很簡單,直接使用Log類別info()這個方法可以簡單的紀錄Log,info()的第一個參數是字串,填入message名稱,第二個參數是array,看需要紀錄什麼內容,下面的範例是全部記下來。

  • 使用before middleware紀錄request Log
use Illuminate\Support\Facades\Log;
    public function handle($request, Closure $next)
    {
        Log::info('request', ['request' => $request]);
        return $next($request);
    }
}
  • 使用after middleware紀錄reponse Log
use Illuminate\Support\Facades\Log;
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        Log::info('response', ['response' => $response]);
        return $response;
    }

結果:

[2020-10-14 17:08:26] local.INFO: request {"request":{"Illuminate\\Http\\Request":"GET /api/card HTTP/1.1
Accept:          */*
Accept-Encoding: gzip, deflate, br
Connection:      keep-alive
Content-Length:  29
Content-Type:    application/json
Host:            127.0.0.1:8003
Postman-Token:   e5b9a16f-4d63-4e6e-a4fb-c2843b8a3ac6
User-Agent:      PostmanRuntime/7.26.5
Usertoken:       IpRQEsFsp1BUde5

{
    \"card_name\" : \"ggggg\"
}"}} 
[2020-10-14 17:08:26] local.INFO: response {"response":{"Illuminate\\Http\\JsonResponse":"HTTP/1.1 200 OK
Cache-Control:         no-cache, private
Content-Type:          application/json
Date:                  Wed, 14 Oct 2020 09:08:26 GMT
X-Ratelimit-Limit:     60
X-Ratelimit-Remaining: 59

{\"status\":true,\"user_data\":{\"id\":3,\"username\":\"gill\",\"email\":\"gill@gmail.com\",\"image\":\"\",\"created_at\":\"2020-09-15T04:01:19.000000Z\",\"updated_at\":\"2020-10-14T09:07:33.000000Z\",\"show_cards\":[]}}"}} 


這樣request和response的header和body都一清二楚了,在debug的時候方便了,可以檢查自己的輸入輸出有沒有符合自己的設計。

鐵人賽終於結束了,想想6個月前的自己啥也不懂,到現在可以發表30篇技術心得,我真的為自己感到高興,同時也希望看這系列文章的人能有收穫。
雖然已經完成30天的挑戰了,不過我的後端之路還很長,若還有機會,會再發表文章,看我文章的大佬們,也請不吝賜教,謝謝各位,我們下次見。


上一篇
Day29 Postman 設定環境變數
系列文
後端新手 使用laravel 從零開始 到開出api30

尚未有邦友留言

立即登入留言