Search code examples
laravellaravel-5.4laravel-5.5laravel-5.6

How to log responses of an api request in terminate function of a Laravel middleware


I need to log responses of each api request. For that I created a middleware and used ResponseTrait in terminate function of that middleware. Everything works fine until I use the status function of ResponseTrait. I tried both $this->status and self::status but nothing worked. It says syntax error when I use this function. Following is the code of my middleware.

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Spatie\HttpLogger\LogWriter;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\ResponseTrait;

class logger implements LogWriter
{
   use ResponseTrait;
   /**
    * 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)
    {
      $responseCode = $this->status();
    }
 }

Solution

  • The response status comes from the result of $next($request);, so you'd need to reference it like:

    $response = $next($request);
    $status = $response->status();
    return $response;