laravel本地开发日志排查需三步:实时查看(log:tail或tail -f)、上下文增强(主动打标+脱敏)、sql监控(query log+可视化log-viewer)。

本地开发时,Laravel日志是排查问题的第一手线索。不用等报错、不靠猜,直接看它写了什么、什么时候写的、为什么写的——关键在“怎么快速看到、精准过滤、关联上下文”。
实时盯住日志变化(命令行最高效)
开发中问题常即时发生,刷新页面后立刻看日志最直观:
- 运行
php artisan log:tail(需先安装spatie/laravel-tail),支持颜色高亮、按级别过滤(如--level=error),比原生命令更贴合 Laravel 结构 - 没装扩展?用系统命令:
tail -n 50 -f storage/logs/laravel.log,加| grep --line-buffered "Exception\|SQLSTATE"只留关键错误 - 查某天的历史日志?文件名带日期(如
laravel-2026-10-20.log),直接cat storage/logs/laravel-2026-10-20.log | grep "TokenMismatch"
让日志自带业务上下文
光有堆栈没用,得知道是谁、在哪、干了什么。主动打标签比被动翻找快十倍:
- 在
app/Exceptions/Handler.php的report()方法里,对特定异常补一句Log::warning('支付回调失败', ['order_id' => $exception->order_id ?? null, 'status' => $exception->status ?? 'unknown']); - 在关键业务逻辑前加
Log::debug('用户开始提交订单', ['user_id' => auth()->id(), 'cart_items' => $cart->items->count()]); - 避免记录敏感字段(如密码、token),用
Arr::except($data, ['password', 'api_token'])脱敏后再写入
SQL查询日志:看清数据库到底执行了什么
慢响应、空结果、外键报错……八成和 SQL 有关。别只信 Eloquent 写法,要看真实语句:
- 临时调试单个请求:控制器里加三行
DB::enableQueryLog();User::where('email', request('email'))->first();dd(DB::getQueryLog());(含query、bindings、time) - 全局监听所有查询(推荐开发环境):在
AppServiceProvider@boot中注册DB::listen(function ($query) {<br> Log::channel('query')->info($query->sql, $query->bindings);<br>});
再在config/logging.php里配一个query通道,单独存到storage/logs/query.log - 确认环境已开:检查
.env中APP_ENV=local且APP_DEBUG=true,否则部分日志不会触发
可视化查看 + 权限控制(适合团队协作)
多人共用本地环境时,原始文本日志难共享、易误读。用图形界面提升效率又不失安全:
- 装
opcodesio/log-viewer:composer require opcodesio/log-viewer→php artisan log-viewer:publish→ 访问/log-viewer - 默认仅开发环境开放,如需加登录保护,在
config/log-viewer.php中设置'middleware' => ['auth'],并确保auth中间件可用 - 它支持多日志类型:Horizon队列日志、Nginx访问日志、Redis操作日志,统一入口,不用切窗口











