telescope 页面为空是因为 watcher 未启用、环境非 local、配置被跳过或迁移未执行;需检查 config/telescope.php 中 requestwatcher 和 querywatcher 是否为 true,并确认已运行 php artisan migrate。

Telescope 路由能访问、界面能打开,但看不到请求或 SQL 查询?大概率是 watcher 没开、环境没对、或配置被跳过。
为什么 /telescope 页面空着,一条请求/查询都不显示?
Telescope 不是“装完就自动全量记录”,它默认只启用部分 watcher,且强依赖运行时环境判断。常见原因有:
-
APP_ENV不是local(比如设成了dev或staging),哪怕APP_DEBUG=true也无效 -
config/telescope.php中对应 watcher 的enabled是false,例如'Laravel\Telescope\Watchers\RequestWatcher' => false或'Laravel\Telescope\Watchers\QueryWatcher' => false - 用了 Laravel 11+,但
App\Providers\TelescopeServiceProvider没在config/app.php的providers数组里显式注册(Laravel 11 默认不自动发现) - 执行过
php artisan telescope:install却漏掉php artisan migrate,导致数据表缺失,写入失败静默丢弃
怎样确认 RequestWatcher 和 QueryWatcher 真的在工作?
别只看界面,直接查配置和日志行为:
- 打开
config/telescope.php,搜索RequestWatcher和QueryWatcher,确保它们的值是true - 在代码里加一行
Telescope::recordMessage('test request hit', 'debug');,刷新页面后去/telescope→ “Messages” 标签页找,能看见说明 Telescope 基础链路通了 - 手动触发一个带查询的路由(比如
User::first()),然后立刻执行php artisan tinker并运行:DB::enableQueryLog(); User::first(); dd(DB::getQueryLog());—— 如果这个能打出 SQL,但 Telescope 里没记录,基本锁定是QueryWatcher未启用或被ignore规则过滤 -
QueryWatcher默认会忽略SHOW TABLES、PRAGMA等元数据查询,这是正常行为,不是 bug
点击某条请求后,为什么看不到绑定参数的 SQL?
这其实是 Telescope 的设计限制:它只在 QueryWatcher 捕获到查询时才记录绑定参数,而「请求详情页里的 Queries 子 tab」只是关联展示,不重新解析。所以关键点是:
- 必须确保
QueryWatcher已启用,且没被ignore配置拦截(比如设置了'prefixes' => ['test_']却查的是users表) - 绑定参数只在预处理语句(
DB::table()->where(...)->get()这类)中生效;原生DB::select("SELECT * FROM users WHERE id = $id")是字符串拼接,Telescope 记录的就是拼完的完整 SQL,没有“绑定”概念 - 如果用了读写分离,且查询走的是从库连接,需确认
QueryWatcher是否监听了该连接名(默认只监听default) - 某些 ORM 封装(如 Eloquent 的
toSql())不会触发QueryWatcher,因为它没真正执行
生产环境误开了 Telescope 会怎样?
不是“慢一点”,而是可能直接拖垮服务:
- 每条 HTTP 请求都会序列化整个
Request和Response对象(含 body、headers、session),内存暴涨 - 每个 SQL 查询都记录完整绑定参数 + 执行时间 + 堆栈,高频写入会导致数据库 I/O 瓶颈,尤其是用 MySQL 时容易锁表
- Telescope 的
telescope_entries表没有复合索引优化,默认只有created_at单字段索引,查历史数据越来越卡 -
TELESCOPE_ENABLED=false不可靠——只要APP_ENV=local,Telescope 就会绕过这个开关强制加载路由和 watcher
最保险的做法:生产环境的 .env 里死守 APP_ENV=production,并且删掉 App\Providers\TelescopeServiceProvider 在 register() 中的任何条件注册逻辑。











