服务器错误类的异常如何记录到日志
程序运行中会抛出很多异常,有表单验证的错误,身份授权的错误,还有一些比如数据库连接错误,redis连接错误,文件权限错误等等的异常
像表单验证、身份授权这类错误可以明确提示用户,但是数据库、redis、文件权限等这类错误只想提示用户服务器错误,具体的错误信息只记录到日志,这些异常该怎么处理?
App\Exceptions\Handler.php
public function register()
{
$this->reportable(function (Throwable $e) {
});
}
public function report(Throwable $e)
{
logImport([
'uri' => request()->getRequestUri(),
'headers' => request()->header(),
'params' => request()->all(),
'message' => $e->getMessage(),
]);
}
protected function unauthenticated($request, AuthenticationException $exception)
{
Response::fail('', ResponseCodeEnum::TOKEN_EXPIRE);
}
protected function invalidJson($request, ValidationException $exception)
{
Response::fail(current($exception->errors())[0], ResponseCodeEnum::FORM_ERROR);
}
看
\Illuminate\Foundation\Exceptions\Handler::render
的实现,可选性有很多。\Illuminate\Contracts\Support\Responsable
接口,其的toResponse
的返回值也可以作为响应结果。renderable
去注册一个回调函数来处理,来处理并返回作为响应。这些方法都可以用来 提示用户服务器错误,如果你想记录这些日志,可以直接在这里处理,也可以查看 report 的实现。