You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<?php
namespace App\Utilities\Exceptions;
use Throwable; use ReflectionClass; use ReflectionMethod; use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Database\Eloquent\ModelNotFoundException; use Laravel\Lumen\Exceptions\Handler as ExceptionHandler; use Symfony\Component\HttpKernel\Exception\HttpException;
class Handler extends ExceptionHandler { /** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ AuthorizationException::class, HttpException::class, ModelNotFoundException::class, ValidationException::class, ];
public function report(Throwable $exception) { // A trick that I took from Laravel macroable trait
$methods = (new ReflectionClass($exception))->getMethods( ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED );
$result = []; foreach ($methods as $method) { // invoke the method so we can collect the result of execution it
$result[$method->name] = $method->invoke($exception); }
// Clear the unnecessary method
unset($result['getTrace']); unset($result['__toString']);
// clear the null values then encode it as json
// so we can decode it as an object in the Monolog Processor
$result = json_encode(array_filter($result));
return Log::emergency($result); }
public function render($request, Throwable $exception) { return parent::render($request, $exception); } }
|