Vue.jsをフロントエンドに使ったシステム開発にて、LaravelをREST APIサーバとして使っています。
ブラウザからのアクセスではないのでエラー発生時などに画面でエラーが確認できるわけではないので、デバッグが捗りませんね。
そこで、フロントエンド側やRestlet Clientなどのテスト用クライアントから、ちゃんとアクセス出来ているかを簡単に確認するために、簡易ログを記録したいと思います。
Middlewareを使って実現します。
ミドルウェアを定義
php artisan make:middleware RequestResponseLogMiddleware
→ app/Http/Middleware/RequestResponseLogMiddleware.php が生成されます。
(直接作っても良いですが、一応、お作法に従います。)
RequestResponseLogMiddlewareを編集
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\App; class RequestResponseLogMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $uniqid = uniqid(); if (App::environment('local')) { $this->logRequest($uniqid, $request); } $response = $next($request); if (App::environment('local')) { $this->logResponse($uniqid, $response); } return $response; } /** * Log request * * @param string $uniqid * @param \Illuminate\Http\Request $request https://laravel.com/api/5.7/Illuminate/Http/Request.html */ private function logRequest($uniqid, $request) { \Log::debug($uniqid, [ // "header" => $request->header(), "method" => $request->method(), "path" => $request->fullUrl(), "input" => $request->all(), ]); } /** * Log response * * @param string $uniqid * @param \Illuminate\Http\Response $response https://laravel.com/api/5.7/Illuminate/Http/Response.html */ private function logResponse($uniqid, $response) { \Log::debug($uniqid, [ // "header" => $response->headers, "status" => $response->status(), "exception" => $response->exception, //"content" => $response->content(), ]); } }
リクエストの Authorizationヘッダ, レスポンスの Content-Typeヘッダ、コンテンツ内容も出力したい場合は、それぞれのコメントを解除してください。
ミドルウェアを登録
グローバルミドルウェアとして適用する場合
システム共通で常にこのミドルウェアを使用する場合は Karnel.php に登録します。
:
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
:
\App\Http\Middleware\RequestResponseLogMiddleware::class,
:
];
:
Routeの種類や、Route毎に適用する場合
下記をご参考ください。
- Routeの種類: Middleware Groups
- Route毎: Assigning Middleware To Routes
ログを監視
ログは通常、下記に出力されます。
storage/logs/laravel.log
設定は logging.php を参照
監視はlinuxのtailコマンドを使うなどしましょう。
tail -f storage/logs/laravel.log # 初期設定のまま tail -f storage/logs/laravel-2018-10-28.log # Dailyログにしている場合はファイル名にご注意