跳转到主内容
极星编程网:以代码为星,赴技术山海!

Laravel Telescope调试工具深度使用

Telescope 数据不显示的主因是环境配置、Watcher 开关和数据库迁移三者未正确协同:APP_ENV 必须为 local 且 APP_DEBUG=true;config/telescope.php 中 QueryWatcher 等需设为 true;必须执行 php artisan migrate 创建 telescope_entries 表。 Telescope 路由能打开、界面有内容,但关键数据(比如 SQL 查询、队列任务、日志)不显示?不是装得不对,是默认只开了一半功能,且强依赖环境判断和显式配置。 为什么 /telescope 页面空或部分标签没数据 常见现象:Requests 标签能看到请求,但 Queries、Jobs、Logs 里一条都没有;或者点了请求详情,下方 Queries 区域空白。
APP_ENV
必须是
local
(不能是
dev
、
staging
或空值),
APP_DEBUG=true
也必须同时满足
config/telescope.php
中对应 watcher 的键值为
false
,例如
'Laravel\Telescope\Watchers\QueryWatcher' => false
—— 默认 Laravel 10+ 是
true
,但 Laravel 11+ 安装后可能被重置为
false
漏执行
php artisan migrate
:表
telescope_entries
缺失会导致写入静默失败,界面无报错但数据不存 Laravel 11+ 需确认
App\Providers\TelescopeServiceProvider::class
已显式注册在
config/app.php
的
providers
数组中(自动发现默认关闭) 用
php artisan route:list | grep telescope
验证路由是否注册;无输出说明服务提供者根本没加载 如何确认 QueryWatcher 和 JobWatcher 真正在工作 别只刷页面等结果,直接验证采集链路是否通: 在
config/telescope.php
的
watchers
数组里,确认
'Laravel\Telescope\Watchers\QueryWatcher'
和
'Laravel\Telescope\Watchers\JobWatcher'
值为
true
临时加一行测试代码:
Telescope::recordMessage('query-test', 'debug');
,然后刷新
/telescope
→ Messages 标签页,能看见说明 Telescope 基础写入正常 手动触发一个查询:
User::where('id', 1)->first();
,再立刻进
php artisan tinker
执行
DB::getQueryLog()
确认 SQL 确实发出了;如果 tinker 能打出,但 Telescope 里没有,基本锁定是
QueryWatcher
被 ignore 规则过滤(如设置了
'prefixes' => ['test_']
却查的是
users
表) 队列任务要确保驱动不是
sync
(同步模式下 Telescope 捕不到),且任务已真正 dispatch(非
dispatchSync()
) 绑定参数不显示、SQL 显示不全的真正原因 不是配置漏了,是 Telescope 的记录机制和 SQL 类型共同决定的: Laravel 13.2.0 PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。 下载 绑定参数只在预处理语句中生效:
DB::table('users')->where('id', $id)->get()
这类会记录参数;而
DB::select("SELECT * FROM users WHERE id = $id")
是字符串拼接,Telescope 只记录原始语句,无参数可绑 QueryWatcher 默认忽略元数据查询(如
SHOW TABLES
、
PRAGMA
),这不是 bug,是设计行为 大响应体或长 SQL 被截断?检查
config/telescope.php
中
RequestWatcher
的
'size_limit' => 64
,可调大到
1024
(单位 KB) 想看完整 SQL + 参数,必须点进单条请求详情页的 Queries 子 tab —— 首页的“Queries”汇总只是入口,不展开看不到绑定值 生产环境误启用 Telescope 的后果比想象中严重 它不是“低采样率监控”,而是“全量请求快照记录器”,一旦启用就停不下来: 每条请求都存完整
request->all()
、
response->content()
、所有 SQL 绑定参数、调用栈、中间件顺序——高并发下数据库写入压力陡增,内存暴涨
TELESCOPE_ENABLED=true
在
.env
里设了也没用,因为
config/telescope.php
的
enabled
闭包默认只返回
$request->isLocal()
,靠环境变量控制不可靠 最稳妥的做法:上线前删掉
composer require laravel/telescope
(或至少移除
--dev
),并从
config/app.php
中彻底注销
TelescopeServiceProvider
如果真要在预发环境灰度,不要改
enabled
,而是用
ignore
规则做路径级过滤,例如只记录
/api/v1/orders
相关请求 Telescope 的核心价值不在“开了就能看到”,而在“精准控制哪些行为该被记录、在哪种条件下才触发”。很多问题其实出在 watcher 开关、环境判定、迁移缺失这三处,而不是功能本身失效。

相关文章