Skip to content

Instantly share code, notes, and snippets.

@kmuenkel
Created August 5, 2021 21:01
Show Gist options
  • Save kmuenkel/d0b2dc6cadce749440c38f9ed8763311 to your computer and use it in GitHub Desktop.
Save kmuenkel/d0b2dc6cadce749440c38f9ed8763311 to your computer and use it in GitHub Desktop.
<?php
namespace App\Http\Middleware;
use Closure;
use Exception;
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 Exception
*/
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(),
'user' => optional($request->user())->getAuthIdentifier()
]
];
logger(print_r($log, true));
}
try {
/** @var Response|RedirectResponse|JsonResponse $response */
$response = $next($request);
} catch (Exception $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 (Exception $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