Laravel Telescope:优雅应用开发调试工具

2019-01-1510:19:18后端程序开发Comments2,575 views字数 4112阅读模式

Laravel Telescope 是由 Mohamed Said 和 Taylor Otwell 开源 的 Laravel 应用的调试工具。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

你可以使用 Composer 安装到你的应用中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

安装完 Telescope 后,你可以访问 /telescope 来访问该应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Telescope 能做什么事?

如果你之前用过 Clockwork 或者 Laravel Debugbar ,那么这两款应用与 Telescope 进行对比的话就是纯 UI 界面和重量级武器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Telescope 由一系列监听器组成,这些 "监听器" 监听每个进入应用的请求,不管是来自 HTTP 、命令行、任务调度还是队列的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

这些监听器捕获这些请求以及其相关数据信息 -- 例如数据库查询以及其执行时间,是否命中缓存,事件触发邮件触发等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

在它操作界面上有用于检查以下各项的选项栏,每个选项栏都代表它的监听器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

  • Requests
  • Commands
  • Schedule
  • Jobs
  • Exceptions
  • Logs
  • Dumps
  • Queries
  • Models
  • Events
  • Mail
  • Notifications
  • Cache
  • Redis

观察者标签

让我们逐步浏览每个选项查看观察到的内容。每个选项都显示一个列表页面,然后您可以点击查看指定项目的详细信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

(HTTP) 请求

Laravel Telescope:优雅应用开发调试工具

该选项允许您查看进入应用程序的所有 HTTP 请求。您将能查看所有 HTTP 请求以及每个请求的详细信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具
Laravel Telescope:优雅应用开发调试工具
Laravel Telescope:优雅应用开发调试工具

每个请求页面还会显示来自其他观察者关于此请求相关的数据;例如,所有数据库查询以及它们花费时长;该请求已通过身份验证用户;等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

命令行

Laravel Telescope:优雅应用开发调试工具

命令选项列出已运行的所有命令及其退出代码。您还可以点击查看所有参数,选项和相关内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

计划任务

列出已运行的计划任务。在每个任务的详细信息页面上,查看他们的所有计划信息,例如他们的 cron 计划(例如 * * * * *)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

任务

Laravel Telescope:优雅应用开发调试工具

任务部分会列出所有运行过,和正在运行的任务。他和Horizon很类似,不过Horizon只支持Redis驱动,而且它不仅仅是UI,它还能和队列沟通,看你队列运行的情况。Telescope,简简单单只是一个UI,一个可以和任何队列驱动玩在一起的UI。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

在任务列表页上,你会看到任务名,和它在哪个队列和连接上运行,她的工作情况,和其所发生的经历。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

在任务细节页面上,你会看到以上列举的数据,以及:主机名, 他的FQCN,网络连接,队列,尝试次数,超时,还有标签。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

任务会自动给用过的Eloquent模型贴标签 (栗子: App\Video:1) ,如果用过用户模型,就会给用户模型贴标签,以此类推。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

标签
诸如请求,命令等项目,会自动被Telescope贴标签 (举栗子: 如果一个用户发出了请求,他就自动会被贴上 Auth:1 if User 1 ; 如果你点击那个标签, Telescope就只会显示被贴上该标签的项目)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

如HTTP请求一般,你可以看到所有与此任务相关的信息,比如数据库查询记录,其触发的其他任务,和任何生成的日志。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

不过,你如若出发了封闭函数,那么你所见之信息不是 App\Jobs\RenderVideo , 取而代之的是 Closure (web.php:43) .文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

新封闭函数队列
Taylor写了一个新的库,加回了队列封闭函数 (Laravel很多年前用过)。 这个库的功能是,当你将一个模型放入封闭函数中,它只会存这个模型的ID,而不是整个对象。(原作者说的: 岂不妙哉?(反正队列的类已经如此作为了),他很兴奋)。
dispatch(function () use ($video) { // do stuff in a queued job // 做一些队列的事情 });
这样做以后,封闭函数会被序列化,并且有一个哈希(Hash)值如影随形。这样可以防止你的代码在进入队列事件后,代码被篡改,很是不好。现在有了哈希,函数会先被检查一遍,妈妈就不怕我的代码被篡改了。
该封闭函数会被序列化为一个长字符串,加上他的哈希(与签名URL如出一辙)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Exceptions

Laravel Telescope:优雅应用开发调试工具

该功能将记录所有异常,并可查看具体异常情况。界面使用选项卡的形式呈现,包括主机信息,类型,请求,标签,用户身份验证等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

除此之外也可看到异常在代码中的位置,使其高亮并展示上下代码段,且包含完整的堆栈追踪。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具
Laravel Telescope:优雅应用开发调试工具

你还可以从抛出异常请求中获取指向异常详情页面的链接。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

注意:在众多选项卡中,如果您在单个页面上(例如,给定的异常页面),你也可获得指向生成该页面的请求链接。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

如果产生多次相同的异常,它们将在列表页面上进行分组,但仍然可以深入查看异常显示页面中的各个异常。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Logs

日志项展示了日志的基本信息,级别和每条日志项的记录时间。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

当你访问日志的单个详细页面时,你可以看到更多消息,包含所有你传递给日志的上下文数据(作为数组)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

"比挖掘原始文本文件棒一点。".文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

当你用数组为你的日志项传递上下文时,你可以查看所有数据,查看触发它的请求,触发的用户。"比挖掘原始文本文件棒一点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

Dump screen

Laravel Telescope:优雅应用开发调试工具

"这是我最爱的功能之一"文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

如果你代码中使用 dump() 函数,而且你在 Telescope 中打开了 dump screen。你可以在 Telescope 中看到 dumps 并非来自你实际应用。这为你提供了数据的 dd() 样式输出,而不会弄乱您的正常页面加载。每个 dump 还链接到生成它的请求。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

如果你离开 dump screen,你所有的 dumps 会突然再次显示到你的浏览器上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Queries

Laravel Telescope:优雅应用开发调试工具

列出了所有数据查询相关信息,就像 debug bar 一样。如 消耗时常、完整查询、请求触发 等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

漂亮的格式化显示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

可以在服务中配置慢查询的边界,一旦查询查过其配置时间将会被标记,并配以红色警告显示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

注意:每个列表页都有快捷方式和快速搜索。搜索标签和其他内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Models

Laravel Telescope:优雅应用开发调试工具

可以看到 查询、更新、删除事件;以及这些事件产生的变化 等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

事件

Laravel Telescope:优雅应用开发调试工具

显示所有事件的列表。可以看到哪些事件是通过标记广播的;查看所有侦听器的列表,并深入了解调用的对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

邮件

Laravel Telescope:优雅应用开发调试工具

显示发送的所有电子邮件的列表;收件人是谁;什么时候发的;是否还在队列,然后什么时候出队的。可以看到电子邮件主题,当你深入研究它时,你也会看到诸如 MailTrap 的邮件预览。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

甚至可以下载原始的 .eml 文件并在选定的客户端中打开。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Notifications

Laravel Telescope:优雅应用开发调试工具

显示所有通知,及其类型,等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

无法预览,因为有些通知是不可预览的,假如是邮件通知,你就会看到它在列表中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

如果通知已进入队列,还可以在 Jobs 的请求部分看到。有很多方式可以得到这些数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Cache

显示缓存命中、未命中和更新等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

显示键,值,何时过期。可以看到触发它的请求,也可以在请求页面上看到该请求的所有缓存命中/未命中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

Redis

跟上面的缓存类似。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

诸如花了多久时间,什么时候发生,什么时候发起请求等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Authenticated user

在任一选项卡的条目上获取已验证用户的相关信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

Authorization

可在生产环境的 telescope 服务中,配置可访问的邮件账户列表文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

在Gate 的 viewTelescope 中定义哪些用户可以访问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

筛选

你可能不想在生产环境中把所有东西都存着,所以你可以在 Telescope 服务提供者中, 运行 Telescope::filter(function ($entry))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

默认筛选器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

function ($entry) {
    if (local) { return true; }

    return $entry->isReportableException ||
        $entry->isfailedJob() ||
        $entry->isScheduledTask() ||
        $entry->hasMonitoredTag();
}

复制代码

但是你可以自由地修改它。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

监控标签:

点进雷达按钮,声明一个监控标签。你可以在 UI 界面声明一个 Auth:1 监视器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

生产环境中不会记录请求,但是如果你有一个像 Auth:1 这样的监视器,你就会看到所有的请求都被记录下来,除非你取消监视。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

NOTE: 如果你使用的是 Redis 队列的话, Horizon 和 Telescope 能完美搭配。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

修剪

在 Telescope 中任务调度会修剪掉过期的条目。你可以每晚都删除超过__ 小时的东西。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

这个也是在 config/telescope 中设置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

可以随时启用或弃用任意观察者。 E.g. Watchers\CacheWatcher::class 就可以弃用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

还有一个 TELESCOPE_LIMIT 默认定义是 100 ;该选项的意义就是一次性进行 100 个查询,100 次 Redis 查询等。它们都可以在env中进行配置。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

杂项

Telescope 可以在本地和生产环境中运行,并有内建授权和工具用来保护私有数据。它可从多角度访问同类数据,具备一系列配置项,提供了健壮的标记和过滤功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

考虑把它放在一个独立的数据库中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Taylor 稍后就在 Twitter 上提到你可以添加过滤器从而确保私有数据不会被记录下来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

你可以使用 Telescope::night() 来开启夜晚模式(可能在某个服务提供者那里?)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

Laravel Telescope:优雅应用开发调试工具

Q&A:

  • 数据存放在何处?隐藏在一个 StorageRepository 接口实现之后; 类似数据库一样运作在 Redis 上。你可以随心所欲的实现它。这个接口中只有6-7 个方法。
  • 它能存多少数据?不是太多,因为生产环境几乎会抛弃所有的东西,修剪下来,你一次只能保存 100 个。
  • 我们能从 Slack 收到通知吗?我们正在努力。
  • 我能退出 Bugsnag/etc.吗? 可能不能。虽然它简易且轻便,但并不意味着稳定健壮。小心火烛。
  • 我们能否按照时间戳进行过滤?暂时还不能,但是这个是开源项目,帮帮我们
  • 在系统引导阶段会产生什么影响?每次只会执行一个查询。生产环境中不会频繁地把所有东西都插入进去。你可以取消你不关心的监听器。
  • 我们能在同一个UI中检查多个应用吗?可以;只需要在同一个数据库中指向并记录它们,然后考虑做标记/过滤, 这样你就可以按需做区分了。
  • Laravel 的哪个版本能与之兼容? 5.7.7+。

作者:Summer__
链接:https://juejin.im/post/5be37eddf265da615f76c25d
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9353.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/9353.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定