Laravel异常处理扩展

2019-05-10  本文已影响0人  pengtoxen

在APP开发的时候,经常会遇到因为服务端报错而接口挂掉的情况.作为开发者要避免出现这样情况.除了严格对接口的输入输出做控制,也要对异常处理类进行扩展,从而达到完美避免接口挂掉的情况.

以下是基于Laravel框架的异常处理扩展.一旦出现异常情况,就发邮件给管理员,从而及时查看.

//目录app/Exception/Hander.php
    public function render($request, Exception $e) {
        if ($e instanceof ModelNotFoundException) {
            $e = new NotFoundHttpException($e->getMessage(), $e);
        }
        if ($request->is('api/*')) {
            if ($e instanceof NotFoundHttpException) {
                return response(AjaxCallbackMessage('请求接口不存在!', false), 404);
            }
            $key = md5($request->fullUrl());
            if (\App::environment() === 'production' && !(\Cache::has($key) ? \Cache::get($key) : false)) {
                //发送短信提醒
                //SendSMS(18058190409, '接口:'.$request->fullUrl().'异常!', 'interface_exception');
                \Cache::put($key, true, 30);
                if (!$e instanceof \Symfony\Component\Debug\Exception\FlattenException) {
                    $e = \Symfony\Component\Debug\Exception\FlattenException::create($e);
                }
                $exception = new \Symfony\Component\Debug\ExceptionHandler();
                $content = $exception->getContent($e);
                $css = $exception->getStylesheet($e);
                \Mail::queue('errors.api.mail', ['url' => $request->fullUrl(), 'request' => $request->all(), 'content' => $content, 'css' => $css], function ($message) {
                    $message->to('xihuan@tyrbl.com')
                            ->cc('zhangyl@tyrbl.com')
                            ->subject('商圈接口异常');
                });
            }
            return response(AjaxCallbackMessage('服务器累了,稍后再试!', false));
        }
        return parent::render($request, $e);
    }
上一篇下一篇

猜你喜欢

热点阅读