Skip to content

Instantly share code, notes, and snippets.

@kmuenkel
Created August 16, 2021 18:36
Show Gist options
  • Save kmuenkel/70a7116bda03fdeabe59e6ee16e02372 to your computer and use it in GitHub Desktop.
Save kmuenkel/70a7116bda03fdeabe59e6ee16e02372 to your computer and use it in GitHub Desktop.
Debug log data about incoming requests and responses
<?php
namespace App\Http\Middleware;
use Closure;
use Throwable;
use GuzzleHttp\Psr7\Uri;
use Illuminate\Http\{JsonResponse, RedirectResponse, Request, Response};
/**
* Class Debug
* @package App\Http\Middleware
*/
class Debug
{
/**
* @param Request $request
* @param Closure $next
* @return Response|RedirectResponse|JsonResponse
* @throws Throwable
*/
public function handle(Request $request, Closure $next)
{
$response = $error = null;
$flattenHeaders = function ($value) {
return (is_array($value) && count($value) == 1) ? current($value) : $value;
};
if (config('app.log_requests')) {
$log = [
'request' => [
'method' => $request->method(),
'url' => $request->url(),
'cookies' => $request->cookies->all(),
'headers' => array_map($flattenHeaders, $request->headers->all()),
'content' => $request->all()
]
];
if ($route = $request->route()) {
$log['route'] = [
'path' => urldecode(app(Uri::class, ['uri' => $route->uri()])->getPath()),
'name' => $route->getName(),
'definition' => $route->getActionName()
];
}
logger(print_r($log, true));
}
try {
/** @var Response|RedirectResponse|JsonResponse $response */
$response = $next($request);
} catch (Throwable $exception) {
$error = $exception;
}
if (config('app.log_requests')) {
$log = [];
if ($response) {
$log['response'] = [
'code' => $response->getStatusCode(),
'headers' => array_map($flattenHeaders, $response->headers->all()),
'content' => $response->content()
];
}
if ($error) {
$log['error'] = ($self = function (Throwable $exception) use (&$self) {
$error = [
'type' => get_class($exception),
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
'trace' => $exception->getTrace()
];
if ($previous = $exception->getPrevious()) {
$error['previous'] = $self($previous);
}
return $error;
})($error);
}
logger(print_r($log, true));
}
if ($error) {
throw $error;
}
return $response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment