1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- namespace app;
- use think\db\exception\DataNotFoundException;
- use think\db\exception\ModelNotFoundException;
- use think\exception\Handle;
- use think\exception\HttpException;
- use think\exception\HttpResponseException;
- use think\exception\ValidateException;
- use think\exception\ErrorException;
- use think\exception\ClassNotFoundException;
- use think\exception\FuncNotFoundException;
- use think\exception\InvalidArgumentException;
- use think\exception\RouteNotFoundException;
- use think\Response;
- use Throwable;
- /**
- * 应用异常处理类
- */
- class ExceptionHandle extends Handle
- {
- /**
- * 不需要记录信息(日志)的异常类列表
- * @var array
- */
- protected $ignoreReport = [
- HttpException::class,
- HttpResponseException::class,
- ModelNotFoundException::class,
- DataNotFoundException::class,
- ValidateException::class,
- ];
- /**
- * 记录异常信息(包括日志或者其它方式记录)
- *
- * @access public
- * @param Throwable $exception
- * @return void
- */
- public function report(Throwable $exception): void
- {
- // 使用内置的方式记录异常日志
- parent::report($exception);
- }
- /**
- * Render an exception into an HTTP response.
- *
- * @access public
- * @param \think\Request $request
- * @param Throwable $e
- * @return Response
- */
- public function render($request, Throwable $e): Response
- {
-
- // 需要写日志的错误
- if($e instanceof Exception || $e instanceof HttpException || $e instanceof ErrorException || $e instanceof ClassNotFoundException || $e instanceof FuncNotFoundException || $e instanceof InvalidArgumentException){
- // 把系统错误写入开发者日志,方便API、回调等场景跟踪异常错误
- $ErrLogMSG = "错误文件".$e->getFile().'/错误行:'.$e->getLine().'/错误内容:'.$e->getMessage();
- WLog('FastPHP_SysError',$ErrLogMSG);
- return $this->json('操作异常',2,$e->getFile().':'.$e->getLine().$e->getMessage(),$e->getTrace());
- }
- if(!empty($e->getMessage())){
- return $this->json($e->getMessage(),2,$e->getFile().':'.$e->getLine().$e->getMessage(),$e->getTrace());
- }
- // 其他错误交给系统处理
- if(false===strpos($e->getMessage(),'登录失效')){
- return parent::render($request, $e);
- }
- }
- private function json(string $msg,int $code,string $info,array $extend=[])
- {
- $debug = env('APP_DEBUG',false);
- if($debug){
- return json(compact('code','msg','info','extend'));
- }else{
- return json(compact('code','msg'));
- }
- }
- }
|