When you developing an API using laravel It is easier to debug api requests if you have a way to see api request and response parameters.
We can simply do that using a middleware. You can create new middleware using artisan command
php artisan make:middleware LogRequests
And add below code to the file created.
<?php namespace App\Http\Middleware; use Closure; class LogRequests { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { // Execute after the HTTP response has been sent to the browser } protected function log($request,$response) { } }
I have added two more functions named terminate and log.
In handle function i have recorded start time.
In terminate function i have recorded the end time and logged request data using the log function.
You can change the log function as per your needs.
Completed code looks like below.
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Log; class LogRequests { public function handle($request, Closure $next) { $request->start = microtime(true); return $next($request); } public function terminate($request, $response) { $request->end = microtime(true); $this->log($request,$response); } protected function log($request,$response) { $duration = $request->end - $request->start; $url = $request->fullUrl(); $method = $request->getMethod(); $ip = $request->getClientIp(); $log = "{$ip}: {$method}@{$url} - {$duration}ms \n". "Request : {[$request->all()]} \n". "Response : {$response->getContent()} \n"; Log::info($log); } }
To run the middleware you should register your middleware on app/Http/Kernel.php
file.
protected $middlewareGroups = [ ..., 'api' => [ 'bindings', 'request_logger' ], ];
protected $routeMiddleware = [ ... 'request_logger' => \App\Http\Middleware\LogRequests::class ];
API requests should be logged in storage/logs/laravel.log file
And you can Clear the log file using following linux command.
truncate -s 0 storage/logs/laravel.log
Let me know your ideas and suggestions in comments . Cheers !