Laravel 报错怎么排查?从日志到源码的完整排错思路(实战总结)

19 阅读3分钟

做 Laravel 的人,大概都经历过这种场景👇
页面一片空白、接口直接 500、啥提示没有,浏览器只给你一句:

Whoops, something went wrong.

这时候你要是只会改代码试运气,那基本就是在“蒙”。

这篇文章不讲虚的,按真实排错顺序,把 Laravel 报错从「看到错误」→「定位问题」→「解决问题」这一整套流程梳理一遍,新手老手都能直接用。


一、先别急着改代码,90% 的人第一步就错了

Laravel 报错,第一反应不是看代码,而是看错误来源

很多人一上来就开始:

  • 怀疑控制器
  • 怀疑模型
  • 怀疑路由
  • 甚至重装依赖

结果折腾半天,发现其实只是 env 配置写错了一个值

正确顺序永远是:

页面表现 → 日志 → 错误类型 → 对应源码


二、Laravel 报错,日志一定是第一入口

1️⃣ Laravel 错误日志在哪?

默认路径:

storage/logs/laravel.log

线上环境 / 本地环境都一样。

如果你连这个文件都没看,那基本属于“闭眼排错”。


2️⃣ 日志里重点看什么?

打开 laravel.log,别被一堆内容吓到,重点只看三样

  • error / exception
  • 报错文件路径
  • 报错行号

典型日志结构大概是这样:

production.ERROR: Undefined index: name 
at /app/Http/Controllers/UserController.php:45

你只需要记住一句话:

Laravel 已经告诉你:哪一行代码出问题了


三、页面空白 or 500?先判断是哪一类错误

情况 1:页面直接 500,没有任何提示

这是最常见的新手坑

先检查 .env

APP_DEBUG=true

开发环境一定要开,否则你永远只能看到 500。

⚠️ 注意:

  • 线上环境一定要关
  • 本地 / 测试环境必须开

情况 2:页面有报错信息,但信息很多

恭喜你,这是好事。

说明:

  • 错误已经被 Laravel 捕获
  • 日志一定有对应记录

别全看,只抓关键信息

  • 报错类型(Undefined index / SQLSTATE / Call to member function)
  • 文件 + 行号

四、最常见的 Laravel 报错类型 & 排查思路

1️⃣ Undefined index / Undefined offset

本质原因:

  • 你访问了一个不存在的数组下标

典型错误写法:

$name = $data['name'];

$data 里根本没有 name

排查思路:

  • 看日志行号
  • dump 一下变量内容
  • 判断数据来源是否可靠

建议写法:

$name = $data['name'] ?? null;

2️⃣ SQLSTATE 报错(数据库相关)

常见原因:

  • 字段不存在
  • 类型不匹配
  • where 条件拼错

排查顺序:

  1. 看完整 SQL
  2. 在数据库里手动执行
  3. 再回头改 Eloquent / Query Builder

不要盲改模型,SQL 是唯一真相。


3️⃣ Call to a member function on null

说明一点:

  • 你以为有对象
  • 实际上是 null

常见场景:

  • 查询结果为空
  • 关联模型没查到

排查方式:

dd($model);

如果是 null,就说明问题不在“方法”,而在“数据”。


五、日志有了,还是定位不到?从源码往回查

这是进阶排错能力

1️⃣ 顺着调用链往上找

Laravel 报错通常会给你一整条调用栈:

  • Controller
  • Service
  • Model
  • Trait

原则只有一个:

找你自己写的第一行代码

框架代码先别管。


2️⃣ 不要怕用 dd / dump

很多人觉得:

“老是 dd,很 low”

但现实是:

  • 80% 的问题
  • 一个 dd() 就能看出来

高效比“优雅”重要。


六、Laravel 队列、定时任务报错,别在页面找

如果你用到了:

  • queue
  • schedule
  • job

页面是永远看不到错误的

正确姿势:

php artisan queue:work

然后看控制台 + laravel.log

很多“任务不执行”,其实是 任务早就失败了,只是你没看日志


七、一个通用的 Laravel 排错流程(记住这个)

最后给你一套通用排错清单,以后遇到问题直接照着走:

  1. 页面是空白、500、还是有提示?
  2. .envAPP_DEBUG 是否正确?
  3. 查看 storage/logs/laravel.log
  4. 定位文件 + 行号
  5. 判断错误类型(数据 / 配置 / 数据库 / 逻辑)
  6. dd() 验证真实数据
  7. 再改代码

先定位,再修改,别反着来


写在最后

Laravel 并不难,难的是不会看错误

你一旦掌握了:

  • 看日志
  • 识别错误类型
  • 顺着调用链查

以后再遇到 500、空白页、奇怪报错,基本都能稳住。