laravel 异常捕获_Laravel框架捕获各种类型错误

Laravel 中的所有异常都由类App\Exceptions\Handler集中处理,这个类有两个方法:report 和 render。

【report 方法】

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);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 动态库 后缀,Android Robolectric加载运行本地So动态库

前言Robolectric 是 Android 的单元测试框架,运行无需 Android 真机环境直接运行在 JVM 之上,所以在 test case 运行速度效率上有了很大提升,接近于 Java JUnit test(JUnit test > Robolectric ≫ androidTest)。不过框架本身并不支持 so …

java web输出语句到控制台_Java工程师(6).循环结构

搞清楚循环结构语句的执行效果与使用场景。程序中的循环流程程序中的循环流程试着编写程序实现下列功能:在控制台中输出100个Hello字符串。在控制台中输出从 1 到 100 的数字。… …循环结构的三要素循环结构必然包含如下三要素:循环变量 (循…

sap生产工单报工_SAP系统PP (ProductionPlanning) 模块知识培训

SAP系统PP(ProductionPlanning)模块知识培训主要内容为支持生产系统规范使用SAP系统开展日常业务,掌握SAP系统常用操作和异常处理的方法,人力资源部在6月10日下午组织实施了一期《SAP系统PP模块知识》的培训。本次培训由信息技术部主管工程师解虎授课&am…

android加载百分比功能,android进度条怎么显示百分比

android布局文件里的ProgressBar长形进度条怎么自 在windows操作系统下Android studio按照如下步骤自动义ProgressBar长形进度条的样式。首先创建一个android项目,打开其中的XML布局文件,如下图:添加ProgressBar控件,如下图&#…

64位程序怎么判断指针是否有效_AArch64应用程序级编程模型

根据实现选择,体系结构支持多级执行特权,由从EL0到EL3的不同异常级别表示。EL0对应于最低的特权级别,通常被描述为无特权。应用层程序员模型是在EL0上执行软件的程序员模型。系统软件决定异常级别,因此决定软件运行的特权级别。当…

n个小球放入m个盒子中_飞么盒子卫生巾自助售卖机前景

嘿,你有没有经历过,出门在外来大姨妈却没带M巾呢?尴尬丛生的你选择怎么做?现在,有了新选择,这也是今天我们迫不及待想要和你们介绍的新朋友—飞么盒子,由Faimes飞么品牌自主研发出品的卫生巾售卖…

Android代码设置角标,Android上的Badge,快速实现给应用添加角标

应用角标是iOS的一个特点,原生Android并不支持。或许是由于当时iOS的通知栏比较鸡肋(固然如今已经改进了不少),而Android的通知栏功能强大?因此才出现了一方依赖于数字角标,一方坚持强大的通知栏,在平常使用中这两种交…

opencv模糊图像变清晰_opencv-python 4.2图像模糊

图像模糊可以去除噪音。import cv2 import numpy as npimage cv2.imread("dogcat1.jpg") cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", image)#均值模糊 dst cv2.blur(image, (5, 5)) cv2.imshow("…

datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理

“ 以后数据处理,都用pandas”01 面临问题作为运维人员,每周要统计很多数据,特别是周四写周报的时候,基本要花半天时间。既然已经学了Python,那就试试优化它。以统计不同厂家、不同设备类型告警量为例。需要将多份类似…

C语言非常大的数组,关于最大子数组问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼纯新手,最近想学一下算法,上网看了个教程,看到了一个很经典的返回最大子数组之和的问题,然后我想问一下我用分治法把最大和求出来了,但是要怎么返回子数组本身呢&#xff…

pandas尾部添加一条_Numpy与Pandas

Numpy#导入numpy包 import numpy as np ##from numpy import * #定义数组 #一维数组 anp.array([1,2,3,4]) #二维数组 bnp.array([(1,2,3),(4,5,6)]) #定义数组类型 cnp.array([(1,2),(3,4)],dtypecomplex) #array([[ 1.0.j, 2.0.j],[ 3.0.j, 4.0.j]])#数组的维数 a.shape #(…

easyexcel 在 设置标题_阿里开源(EasyExcel)

阿里开源(EasyExcel)---导出EXCEL - 请叫我猿叔叔的博客 - CSDN博客https://blog.csdn.net/qq_35206261/article/details/88579151一. 简介导出是后台管理系统的常用功能,当数据量特别大的时候会内存溢出和卡顿页面,曾经自己封装过一个导出,P…

android webview 劫持,安卓包风险安全监测提示存在Activity劫持、WebView远程代码执行,请问怎么解决?...

挺着急的,请问这个怎么解决1、Activity劫持用例名称:Activity劫持风险系数:高风险编号:NESUN-2016-82091, CWE-94,风险描述:攻击者劫持目标Activity并制造跟目标Activity界面相似度很高的界面迷惑用户,可能…

python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解

如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL。什么是Beautiful Soup? Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索…

iview table增加一行减少一行_PQ入门函数:Table.ReplaceValue

一、基础介绍Table.ReplaceValue函数的官方说明如下:Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list)该函数实现的功能是将Table中的值替换成新值,语法翻译成汉语大致如下&#…

android so文件崩溃,android 7.0 因为.so文件而崩溃事件解决

菜鸟进场,方圆十里,寸草不生现在基本都在用第三方的分享,但是不知道为什么,脑残的准备自己集成微博的第三方分享,本来一路躺坑都过来了,不过遇到一个奇葩的问题,软件在android N上会崩溃&#x…

gprs模块ftp 远程升级_基于GPRS无线通信技术的冷链监测系统

GPRS(general packet radio service)是通用分组无线业务的简称,该技术建立在GSM网络的基础上,被称为2.5 代移动通信技术,它将无线通信与Internet 紧密结合。基于GPRS的远程数据采集系统是通过中国移动的GPRS无线通信网…

小米登录协议分析_联想前副总裁常程跳槽小米数月后,波澜再起

► 文 观察者网 吕栋今年初,联想集团前副总裁常程离职2天即加盟小米,这一举动是否违反竞业协议,双方当时曾各执一词。最近,由于联想方面在北京提起劳动仲裁,此事也再度引发舆论关注。9月21日,针对“联想与…

html播放rtmp直播流,video.js实现浏览器播放rtmp协议直播流的问题

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>使用video.js实现rtmp流的直播播放</title><!--引入播放器样式--><link href"http://vjs.zencdn.net/5.19/video-js.min.css" rel"stylesheet…

plsql打开sql窗口快捷键_巧用Navicat for MySQL的快捷键

php中文网最新课程每日17点准时技术干货分享巧妙地使用 Navicat for MySQL 快捷键&#xff0c;可以大大提高工作效率&#xff0c;本篇经验将分类介绍Navicat for MySQL快捷键。ctrlq 打开查询窗口ctrl/ 注释sql语句ctrlshift / 解除注释ctrlr 运行查询窗口的sql语句ctrlshiftr …