Laravel Telescope:優雅的應用除錯工具

Summer__發表於2019-02-28

文章轉自:laravel-china.org/topics/1901…
視訊教程:047. 優雅的應用除錯工具–laravel/telescope (5.7 新擴充套件)

Laravel Telescope 是由 Mohamed Said 和 Taylor Otwell 開源 的 Laravel 應用的除錯工具。

你可以使用 Composer 安裝到你的應用中。

安裝完 Telescope 後,你可以訪問 /telescope 來訪問該應用。

Telescope 能做什麼事?

如果你之前用過 Clockwork 或者 Laravel Debugbar ,那麼這兩款應用與 Telescope 進行對比的話就是純 UI 介面和重量級武器。

Telescope 由一系列監聽器組成,這些 “監聽器” 監聽每個進入應用的請求,不管是來自 HTTP 、命令列、任務排程還是佇列的。

這些監聽器捕獲這些請求以及其相關資料資訊 — 例如資料庫查詢以及其執行時間,是否命中快取,事件觸發郵件觸發等等。

在它操作介面上有用於檢查以下各項的選項欄,每個選項欄都代表它的監聽器:

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

觀察者標籤

讓我們逐步瀏覽每個選項檢視觀察到的內容。每個選項都顯示一個列表頁面,然後您可以點選檢視指定專案的詳細資訊。

(HTTP) 請求

Laravel Telescope:優雅的應用除錯工具

該選項允許您檢視進入應用程式的所有 HTTP 請求。您將能檢視所有 HTTP 請求以及每個請求的詳細資訊。

Laravel Telescope:優雅的應用除錯工具
Laravel Telescope:優雅的應用除錯工具
Laravel Telescope:優雅的應用除錯工具

每個請求頁面還會顯示來自其他觀察者關於此請求相關的資料;例如,所有資料庫查詢以及它們花費時長;該請求已通過身份驗證使用者;等等。

Laravel Telescope:優雅的應用除錯工具

命令列

Laravel Telescope:優雅的應用除錯工具

命令選項列出已執行的所有命令及其退出程式碼。您還可以點選檢視所有引數,選項和相關內容。

Laravel Telescope:優雅的應用除錯工具

計劃任務

列出已執行的計劃任務。在每個任務的詳細資訊頁面上,檢視他們的所有計劃資訊,例如他們的 cron 計劃(例如 * * * * *)。

Laravel Telescope:優雅的應用除錯工具

任務

Laravel Telescope:優雅的應用除錯工具

任務部分會列出所有執行過,和正在執行的任務。他和Horizon很類似,不過Horizon只支援Redis驅動,而且它不僅僅是UI,它還能和佇列溝通,看你佇列執行的情況。Telescope,簡簡單單只是一個UI,一個可以和任何佇列驅動玩在一起的UI。

Laravel Telescope:優雅的應用除錯工具

在任務列表頁上,你會看到任務名,和它在哪個佇列和連線上執行,她的工作情況,和其所發生的經歷。

在任務細節頁面上,你會看到以上列舉的資料,以及:主機名, 他的FQCN,網路連線,佇列,嘗試次數,超時,還有標籤。

Laravel Telescope:優雅的應用除錯工具

任務會自動給用過的Eloquent模型貼標籤 (栗子: AppVideo:1) ,如果用過使用者模型,就會給使用者模型貼標籤,以此類推。

標籤
諸如請求,命令等專案,會自動被Telescope貼標籤 (舉栗子: 如果一個使用者發出了請求,他就自動會被貼上 Auth:1 if User 1 ; 如果你點選那個標籤, Telescope就只會顯示被貼上該標籤的專案)

如HTTP請求一般,你可以看到所有與此任務相關的資訊,比如資料庫查詢記錄,其觸發的其他任務,和任何生成的日誌。

不過,你如若出發了封閉函式,那麼你所見之資訊不是 AppJobsRenderVideo , 取而代之的是 Closure (web.php:43) .

新封閉函式佇列
Taylor寫了一個新的庫,加回了佇列封閉函式 (Laravel很多年前用過)。 這個庫的功能是,當你將一個模型放入封閉函式中,它只會存這個模型的ID,而不是整個物件。(原作者說的: 豈不妙哉?(反正佇列的類已經如此作為了),他很興奮)。
dispatch(function () use ($video) { // do stuff in a queued job // 做一些佇列的事情 });
這樣做以後,封閉函式會被序列化,並且有一個雜湊(Hash)值如影隨形。這樣可以防止你的程式碼在進入佇列事件後,程式碼被篡改,很是不好。現在有了雜湊,函式會先被檢查一遍,媽媽就不怕我的程式碼被篡改了。
該封閉函式會被序列化為一個長字串,加上他的雜湊(與簽名URL如出一轍)

Exceptions

Laravel Telescope:優雅的應用除錯工具

該功能將記錄所有異常,並可檢視具體異常情況。介面使用選項卡的形式呈現,包括主機資訊,型別,請求,標籤,使用者身份驗證等。

Laravel Telescope:優雅的應用除錯工具

除此之外也可看到異常在程式碼中的位置,使其高亮並展示上下程式碼段,且包含完整的堆疊追蹤。

Laravel Telescope:優雅的應用除錯工具
Laravel Telescope:優雅的應用除錯工具

你還可以從丟擲異常請求中獲取指向異常詳情頁面的連結。

注意:在眾多選項卡中,如果您在單個頁面上(例如,給定的異常頁面),你也可獲得指向生成該頁面的請求連結。

如果產生多次相同的異常,它們將在列表頁面上進行分組,但仍然可以深入檢視異常顯示頁面中的各個異常。

Logs

日誌項展示了日誌的基本資訊,級別和每條日誌項的記錄時間。

Laravel Telescope:優雅的應用除錯工具

當你訪問日誌的單個詳細頁面時,你可以看到更多訊息,包含所有你傳遞給日誌的上下文資料(作為陣列)。

“比挖掘原始文字檔案棒一點。”.

當你用陣列為你的日誌項傳遞上下文時,你可以檢視所有資料,檢視觸發它的請求,觸發的使用者。”比挖掘原始文字檔案棒一點。

Laravel Telescope:優雅的應用除錯工具

Dump screen

Laravel Telescope:優雅的應用除錯工具

“這是我最愛的功能之一”

如果你程式碼中使用 dump() 函式,而且你在 Telescope 中開啟了 dump screen。你可以在 Telescope 中看到 dumps 並非來自你實際應用。這為你提供了資料的 dd() 樣式輸出,而不會弄亂您的正常頁面載入。每個 dump 還連結到生成它的請求。

如果你離開 dump screen,你所有的 dumps 會突然再次顯示到你的瀏覽器上。

Queries

Laravel Telescope:優雅的應用除錯工具

列出了所有資料查詢相關資訊,就像 debug bar 一樣。如 消耗時常、完整查詢、請求觸發 等。

漂亮的格式化顯示。

Laravel Telescope:優雅的應用除錯工具

可以在服務中配置慢查詢的邊界,一旦查詢查過其配置時間將會被標記,並配以紅色警告顯示。

注意:每個列表頁都有快捷方式和快速搜尋。搜尋標籤和其他內容。

Models

Laravel Telescope:優雅的應用除錯工具

可以看到 查詢、更新、刪除事件;以及這些事件產生的變化 等。

Laravel Telescope:優雅的應用除錯工具

事件

Laravel Telescope:優雅的應用除錯工具

顯示所有事件的列表。可以看到哪些事件是通過標記廣播的;檢視所有偵聽器的列表,並深入瞭解呼叫的物件。

Laravel Telescope:優雅的應用除錯工具

郵件

Laravel Telescope:優雅的應用除錯工具

顯示傳送的所有電子郵件的列表;收件人是誰;什麼時候發的;是否還在佇列,然後什麼時候出隊的。可以看到電子郵件主題,當你深入研究它時,你也會看到諸如 MailTrap 的郵件預覽。

Laravel Telescope:優雅的應用除錯工具

甚至可以下載原始的 .eml 檔案並在選定的客戶端中開啟。

Notifications

Laravel Telescope:優雅的應用除錯工具

顯示所有通知,及其型別,等等。

無法預覽,因為有些通知是不可預覽的,假如是郵件通知,你就會看到它在列表中。

如果通知已進入佇列,還可以在 Jobs 的請求部分看到。有很多方式可以得到這些資料。

Cache

顯示快取命中、未命中和更新等。

顯示鍵,值,何時過期。可以看到觸發它的請求,也可以在請求頁面上看到該請求的所有快取命中/未命中。

Laravel Telescope:優雅的應用除錯工具

Redis

跟上面的快取類似。

諸如花了多久時間,什麼時候發生,什麼時候發起請求等等。

Authenticated user

在任一選項卡的條目上獲取已驗證使用者的相關資訊。

Laravel Telescope:優雅的應用除錯工具

Authorization

可在生產環境的 telescope 服務中,配置可訪問的郵件賬戶列表

在Gate 的 viewTelescope 中定義哪些使用者可以訪問

Laravel Telescope:優雅的應用除錯工具

篩選

你可能不想在生產環境中把所有東西都存著,所以你可以在 Telescope 服務提供者中, 執行 Telescope::filter(function ($entry))

預設篩選器:

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

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

複製程式碼

但是你可以自由地修改它。

監控標籤:

點進雷達按鈕,宣告一個監控標籤。你可以在 UI 介面宣告一個 Auth:1 監視器。

生產環境中不會記錄請求,但是如果你有一個像 Auth:1 這樣的監視器,你就會看到所有的請求都被記錄下來,除非你取消監視。

NOTE: 如果你使用的是 Redis 佇列的話, Horizon 和 Telescope 能完美搭配。

修剪

在 Telescope 中任務排程會修剪掉過期的條目。你可以每晚都刪除超過__ 小時的東西。

這個也是在 config/telescope 中設定。

可以隨時啟用或棄用任意觀察者。 E.g. WatchersCacheWatcher::class 就可以棄用。

還有一個 TELESCOPE_LIMIT 預設定義是 100 ;該選項的意義就是一次性進行 100 個查詢,100 次 Redis 查詢等。它們都可以在env中進行配置。

雜項

Telescope 可以在本地和生產環境中執行,並有內建授權和工具用來保護私有資料。它可從多角度訪問同類資料,具備一系列配置項,提供了健壯的標記和過濾功能。

考慮把它放在一個獨立的資料庫中。

Taylor 稍後就在 Twitter 上提到你可以新增過濾器從而確保私有資料不會被記錄下來。

你可以使用 Telescope::night() 來開啟夜晚模式(可能在某個服務提供者那裡?)

Laravel Telescope:優雅的應用除錯工具

Q&A:

  • 資料存放在何處?隱藏在一個 StorageRepository 介面實現之後; 類似資料庫一樣運作在 Redis 上。你可以隨心所欲的實現它。這個介面中只有6-7 個方法。

  • 它能存多少資料?不是太多,因為生產環境幾乎會拋棄所有的東西,修剪下來,你一次只能儲存 100 個。

  • 我們能從 Slack 收到通知嗎?我們正在努力。

  • 我能退出 Bugsnag/etc.嗎? 可能不能。雖然它簡易且輕便,但並不意味著穩定健壯。小心火燭。

  • 我們能否按照時間戳進行過濾?暫時還不能,但是這個是開源專案,幫幫我們

  • 在系統引導階段會產生什麼影響?每次只會執行一個查詢。生產環境中不會頻繁地把所有東西都插入進去。你可以取消你不關心的監聽器。

  • 我們能在同一個UI中檢查多個應用嗎?可以;只需要在同一個資料庫中指向並記錄它們,然後考慮做標記/過濾, 這樣你就可以按需做區分了。

  • Laravel 的哪個版本能與之相容? 5.7.7+。

相關文章