laravel异常捕获_Laravel框架捕获各种类型错误
Laravel 中的所有异常都由类App\Exceptions\Handler集中处理,这个类有两个⽅法:report 和 render。
【report ⽅法】
validation框架report ⽅法⽤于记录异常并将其发送给外部服务。默认情况下,report ⽅法只是将异常传递给异常基类并写⼊⽇志进⾏记录,我们可以在report 中⾃定义异常⽇志记录⾏为。
【dontReport 属性】
异常处理器的 $dontReport 属性⽤于定义不进⾏记录的异常类型。默认情况下,HttpException 和 ModelNotFoundException 异常不会被记录,我们可以添加其他需要忽略的异常类型到这个数组。
【render ⽅法】
render ⽅法负责将异常转化为 HTTP 响应。默认情况下,异常会传递给 Response 基类⽣成响应。我们可以 render ⽅法中进⾏异常捕获和返回⾃定义的 HTTP 响应
本次捕获主要通过render⽅法实现,并且定义了⼀些错误等级。
具体代码如下:
namespace App\Exceptions;
use Exception;
use Illuminate\Database\QueryException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\HttpException;
class Handler extends ExceptionHandler
{
protected $levels = [
100 => 'debug',
200 => 'info',
300 => 'notice',
400 => 'notice',
500 => 'warning',
600 => 'error',
700 => 'critical',
800 => 'alert',
900 => 'emergency',
];
protected $msg = [
100 => '通信成功',
200 => '请求处理成功',
300 => '⾝份验证失败',
400 => '参数验证失败',
500 => '请求地址/类型错误',
600 => '数据库语句错误',
700 => '服务端出现异常',
800 => '服务超时请重试',
900 => '程序错误请重试',
];
protected $code = 0;
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions. *
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* @param  \Exception  $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param  \Illuminate\Http\Request  $request
* @param  \Exception  $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
if ($exception instanceof HttpException) {
$this->code = 500;
}
if ($exception instanceof QueryException) {
$this->code = 600;
}
if ($exception instanceof \ReflectionException) {
$this->code = 700;
}
if ($exception instanceof \RuntimeException) {
$this->code = 800;
}
if ($exception instanceof \ErrorException) {
$this->code = 900;
}
if($this->code){
$result = [
'request' =>$request->input(),
'data' => $exception->getMessage(),
'code' => $this->code,
'msg' => $this->msg[$this->code],
];
\Illuminate\Support\Facades\Log::log($this->levels[$this->code],'Render Data',$result); unset($result['request']);
return response()->json($result, 200);
}
return parent::render($request, $exception); }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。