Laravel Telescope 是开发环境专用调试面板,不适用于生产监控;需 APP_DEBUG=true 且 APP_ENV=local 才能访问 /telescope;数据默认全量落库无脱敏,无权限控制,仅适合作为本地“手术灯”使用。

Laravel Telescope 是开发环境专用的调试面板,不能直接用于生产环境监控;它本身不提供远程遥测能力,所谓“Laravel 应用遥测系统”需额外组合日志、队列、HTTP 客户端和外部服务才能实现。
Telescope 装完为啥访问 /telescope 404 或提示 “This application is not in debug mode”
这是最常见误配:Telescope 默认只在 APP_DEBUG=true 且环境为 local 时启用 UI。即使你改了 config/telescope.php 的 enabled,也绕不过底层的环境检查。
- 确认
.env中APP_ENV=local且APP_DEBUG=true(仅限开发机) - 运行
php artisan telescope:install后必须执行php artisan migrate,否则数据库表缺失导致路由注册失败 - 若用 Laravel Octane 或 Swoole,需在
telescope.php中显式设置'driver' => 'database',避免内存驱动冲突 - 清除配置缓存:
php artisan config:clear,否则APP_ENV变更不生效
想把 Telescope 数据发到远程服务器(比如自建日志中心),该 hook 哪个点
Telescope 本身没有“上报”机制,但提供了 Telescope::record() 和监听 TelescopeEntryRecorded 事件两种扩展方式。后者更可控,适合加转发逻辑。
- 在
EventServiceProvider的$listen中添加:TelescopeEntryRecorded::class => [App\Listeners\ForwardTelescopeEntry::class] -
ForwardTelescopeEntry::handle()里可过滤类型(如只传request和exception),再用Http::post()推送到你的接收端 - 注意别在监听器里做阻塞操作(如同步 cURL),否则拖慢请求;建议丢进
dispatch(new ForwardToRemoteJob($entry))异步处理 - 远程接口需校验
X-Telescope-Token(可配在telescope.php的token字段),防止未授权写入
为什么 Telescope 拦不到队列任务或 Artisan 命令的执行记录
因为 Telescope 默认只监听 HTTP 请求生命周期。队列任务、命令行、定时任务等属于独立进程,需要手动启动记录器。
立即学习“PHP免费学习笔记(深入)”;
- 在
app/Console/Kernel.php的schedule()方法开头加:Telescope::startRecording(); - 在
app/Jobs/YourJob.php的handle()开头加同样语句;或统一在AppServiceProvider::boot()里监听JobProcessing事件来自动开启 - Artisan 命令需在
handle()中手动调用Telescope::startRecording(),否则artisan tinker或自定义命令全程无记录 - 注意:
startRecording()不是全局开关,它只对当前请求/进程有效,且重复调用无副作用
用 Telescope 做“生产遥测”的三个硬限制
别被 demo 误导——Telescope 的设计目标就是本地开发辅助,强行用于生产会踩坑:
- 数据全落本地数据库(默认
telescope_entries表),没分库分表、TTL 或归档策略,几天就撑爆磁盘 - 所有 entry 都含完整 request/response body(包括密码字段),没脱敏机制,直接暴露敏感信息
- Web UI 无权限控制,只要能访问路径就能看全部历史,连 basic auth 都没内置,靠 Nginx 限制极不灵活
真要遥测,用 monolog + elasticsearch + kibana 或 Sentry + Laravel Horizon 组合更靠谱。Telescope 最适合的定位,是开发时按需打开、查完即关的“手术灯”,不是 24 小时亮着的“路灯”。



















