如何查看Laravel中自定义异常类的触发与捕获情况【说明】
验证自定义异常需三步:确认异常是否被抛出(检查命名空间与类名后缀),验证report()是否正确记录,确认render()是否按预期响应。务必注意请求类型判断、事务回滚与日志配置等常见卡点,确保异常处理流程完整性。
验证自定义异常这件事,说起来其实不复杂,但很多人习惯一上来就翻日志、打断点,结果绕了一大圈还没找到问题。要想确认自定义异常类有没有被正确触发和捕获,重点不在于“翻日志”或者“打小断点”,而是分三步来验证:它有没有被抛出来、有没有被 report() 记录、有没有被 render() 处理。每一步都对应一个可以观察、可以验证的具体行为。
第一步:看看它有没有真正被抛出来
自定义异常必须明确地 throw 出去,而且类名必须以 Exception 结尾,否则 PHP 是不认的,instanceof 判断也会直接失效。这里有几个常见坑需要注意:
- 检查抛出处有没有用
use AppExceptionsYourCustomException;引入命名空间,如果没有,PHP 会找不到这个类,抛出一个静默失败或者直接报Class not found错误。 - 千万不要直接写
throw new Exception('xxx')—— 这种写法无法被instanceof YourCustomException捕获,等于白抛。 - 一个简单的验证方法:在抛出位置加一句
Log::debug('About to throw YourCustomException');,然后去storage/logs/lara vel.log看看这行日志有没有出现。出现了,说明执行到了抛出点;没出现,那就是前面的条件没满足。
第二步:查 report() 有没有把它记录下来
report() 是异常进入日志系统的入口。默认情况下,所有没有被 $dontReport 排除的异常都会被记录,但你也可以主动控制。实际操作时,可以这样做:
- 打开
app/Exceptions/Handler.php,在report()方法开头加一句:if ($exception instanceof YourCustomException) { Log::warning('Custom exception caught in report', ['msg' => $exception->getMessage()]); } - 然后触发一下这个异常(比如调用一个会抛该异常的接口),再运行
tail -n 20 storage/logs/lara vel.log,搜索Custom exception caught in report。 - 如果没看到,说明异常根本没走到
report()—— 要么是被$dontReport列表屏蔽了,要么是在抛出前就被其他try/catch给吞掉了。
第三步:验 render() 是否按预期响应
render() 决定了用户最终能看到什么。API 请求应该返回 JSON,Web 请求可以返回视图,但有一点必须注意:不能绕过父类的逻辑。具体操作如下:
- 在
render()中对应处理分支里加一行:Log::info('Rendering YourCustomException response'); - 发起请求(建议用
curl -H "Accept: application/json"模拟 API 调用),然后查日志确认这条 log 有没有出现。 - 检查 HTTP 状态码和响应体是否符合预期。比如你抛了
new YourCustomException('No money', 402),那就应该返回状态码 402 和对应的 JSON,而不是 500 或 HTML 页面。 - 另外,务必保留
return parent::render($request, $exception);在最后——漏掉这句,框架内置的异常处理(比如 404、验证失败)也会失效。
快速定位常见卡点
很多时候,问题其实卡在细节上,比如请求类型判断错了、异常被中间件提前吞掉了、或者日志通道配置不对。以下几个点值得格外留意:
$request->expectsJson()在中间件中可能不太可靠,改用$request->is('api/*')会更稳妥。- 事务内抛了异常却没回滚?检查一下是否用了
DB::transaction()闭包,而且内部没有加try/catch静默处理。 - 日志没写进
lara vel.log?确认config/logging.php中'default' => env('LOG_CHANNEL', 'daily')设置没问题,而且磁盘有写权限。 - 开发环境看不到堆栈?确认
APP_DEBUG=true,并且没有在config/app.php的debug_blacklist里误删了关键变量。

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















