歷經千辛萬苦終於來到鐵人賽第30天,今天來用用laravel的Log功能,log再debug時候蠻重要的,利用middleware功能,可以使用Log看到request和response的內容可以拿來跟前端吵架用,可以清楚的知道錯的是前端還是後端。
log設定檔放在config/logging.php
內,裏面有許多channel可以選擇,laravel預設使用stack channel,若要更改log模式,可以參考官網,我這邊先直接使用預設值。log會儲存在storage/logs/laravel.log
我希望所有request和response都紀錄下來,可以使用之前講過的after,before middleware,然後在Kernel.php註冊在全域使用,這樣就可以紀錄每一筆輸入和輸出了。
可以參考我之前的middleware文章Day15 laravel middleware篇
要使用log很簡單,直接使用Log類別info()這個方法可以簡單的紀錄Log,info()的第一個參數是字串,填入message名稱,第二個參數是array,看需要紀錄什麼內容,下面的範例是全部記下來。
use Illuminate\Support\Facades\Log;
public function handle($request, Closure $next)
{
Log::info('request', ['request' => $request]);
return $next($request);
}
}
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天的挑戰了,不過我的後端之路還很長,若還有機會,會再發表文章,看我文章的大佬們,也請不吝賜教,謝謝各位,我們下次見。