摘要:文章轉自視頻教程優雅的應用調試工具新擴展是由和開源的應用的調試工具。計劃任務列出已運行的計劃任務。該封閉函數會被序列化為一個長字符串,加上他的哈希與簽名如出一轍該功能將記錄所有異常,并可查看具體異常情況。事件顯示所有事件的列表。
文章轉自:https://laravel-china.org/topics/19013
視頻教程: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
Notifications
Cache
Redis
觀察者標簽讓我們逐步瀏覽每個選項查看觀察到的內容。每個選項都顯示一個列表頁面,然后您可以點擊查看指定項目的詳細信息。
(HTTP) 請求該選項允許您查看進入應用程序的所有 HTTP 請求。您將能查看所有 HTTP 請求以及每個請求的詳細信息。
每個請求頁面還會顯示來自其他觀察者關于此請求相關的數據;例如,所有數據庫查詢以及它們花費時長;該請求已通過身份驗證用戶;等等。
命令行命令選項列出已運行的所有命令及其退出代碼。您還可以點擊查看所有參數,選項和相關內容。
計劃任務列出已運行的計劃任務。在每個任務的詳細信息頁面上,查看他們的所有計劃信息,例如他們的 cron 計劃(例如?* * * * *)。
任務任務部分會列出所有運行過,和正在運行的任務。他和Horizon很類似,不過Horizon只支持Redis驅動,而且它不僅僅是UI,它還能和隊列溝通,看你隊列運行的情況。Telescope,簡簡單單只是一個UI,一個可以和任何隊列驅動玩在一起的UI。
在任務列表頁上,你會看到任務名,和它在哪個隊列和連接上運行,她的工作情況,和其所發生的經歷。
在任務細節頁面上,你會看到以上列舉的數據,以及:主機名, 他的FQCN,網絡連接,隊列,嘗試次數,超時,還有標簽。
任務會自動給用過的Eloquent模型貼標簽 (栗子:?AppVideo:1) ,如果用過用戶模型,就會給用戶模型貼標簽,以此類推。
標簽
諸如請求,命令等項目,會自動被Telescope貼標簽 (舉栗子: 如果一個用戶發出了請求,他就自動會被貼上?Auth:1?if User 1 ; 如果你點擊那個標簽, Telescope就只會顯示被貼上該標簽的項目)
如HTTP請求一般,你可以看到所有與此任務相關的信息,比如數據庫查詢記錄,其觸發的其他任務,和任何生成的日志。
不過,你如若出發了封閉函數,那么你所見之信息不是?AppJobsRenderVideo?, 取而代之的是?Closure (web.php:43)?.
新封閉函數隊列Exceptions
Taylor寫了一個新的庫,加回了隊列封閉函數 (Laravel很多年前用過)。 這個庫的功能是,當你將一個模型放入封閉函數中,它只會存這個模型的ID,而不是整個對象。(原作者說的: 豈不妙哉?(反正隊列的類已經如此作為了),他很興奮)。
dispatch(function () use ($video) { // do stuff in a queued job // 做一些隊列的事情 });
這樣做以后,封閉函數會被序列化,并且有一個哈希(Hash)值如影隨形。這樣可以防止你的代碼在進入隊列事件后,代碼被篡改,很是不好。現在有了哈希,函數會先被檢查一遍,媽媽就不怕我的代碼被篡改了。
該封閉函數會被序列化為一個長字符串,加上他的哈希(與簽名URL如出一轍)
該功能將記錄所有異常,并可查看具體異常情況。界面使用選項卡的形式呈現,包括主機信息,類型,請求,標簽,用戶身份驗證等。
除此之外也可看到異常在代碼中的位置,使其高亮并展示上下代碼段,且包含完整的堆棧追蹤。
你還可以從拋出異常請求中獲取指向異常詳情頁面的鏈接。
注意:在眾多選項卡中,如果您在單個頁面上(例如,給定的異常頁面),你也可獲得指向生成該頁面的請求鏈接。
如果產生多次相同的異常,它們將在列表頁面上進行分組,但仍然可以深入查看異常顯示頁面中的各個異常。
Logs日志項展示了日志的基本信息,級別和每條日志項的記錄時間。
當你訪問日志的單個詳細頁面時,你可以看到更多消息,包含所有你傳遞給日志的上下文數據(作為數組)。
"比挖掘原始文本文件棒一點。".
當你用數組為你的日志項傳遞上下文時,你可以查看所有數據,查看觸發它的請求,觸發的用戶。"比挖掘原始文本文件棒一點。
Dump screen"這是我最愛的功能之一"
如果你代碼中使用?dump()?函數,而且你在 Telescope 中打開了 dump screen。你可以在 Telescope 中看到 dumps 并非來自你實際應用。這為你提供了數據的?dd()?樣式輸出,而不會弄亂您的正常頁面加載。每個 dump 還鏈接到生成它的請求。
如果你離開 dump screen,你所有的 dumps 會突然再次顯示到你的瀏覽器上。
Queries列出了所有數據查詢相關信息,就像 debug bar 一樣。如 消耗時常、完整查詢、請求觸發 等。
漂亮的格式化顯示。
可以在服務中配置慢查詢的邊界,一旦查詢查過其配置時間將會被標記,并配以紅色警告顯示。
注意:每個列表頁都有快捷方式和快速搜索。搜索標簽和其他內容。Models
可以看到 查詢、更新、刪除事件;以及這些事件產生的變化 等。
事件顯示所有事件的列表。可以看到哪些事件是通過標記廣播的;查看所有偵聽器的列表,并深入了解調用的對象。
郵件顯示發送的所有電子郵件的列表;收件人是誰;什么時候發的;是否還在隊列,然后什么時候出隊的。可以看到電子郵件主題,當你深入研究它時,你也會看到諸如 MailTrap 的郵件預覽。
甚至可以下載原始的?.eml?文件并在選定的客戶端中打開。
Notifications顯示所有通知,及其類型,等等。
無法預覽,因為有些通知是不可預覽的,假如是郵件通知,你就會看到它在列表中。
如果通知已進入隊列,還可以在 Jobs 的請求部分看到。有很多方式可以得到這些數據。
Cache顯示緩存命中、未命中和更新等。
顯示鍵,值,何時過期。可以看到觸發它的請求,也可以在請求頁面上看到該請求的所有緩存命中/未命中。
Redis跟上面的緩存類似。
諸如花了多久時間,什么時候發生,什么時候發起請求等等。
Authenticated user在任一選項卡的條目上獲取已驗證用戶的相關信息。
Authorization可在生產環境的 telescope 服務中,配置可訪問的郵件賬戶列表
在Gate 的 viewTelescope 中定義哪些用戶可以訪問
篩選你可能不想在生產環境中把所有東西都存著,所以你可以在 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()?來開啟夜晚模式(可能在某個服務提供者那里?)
Q&A:數據存放在何處?隱藏在一個 StorageRepository 接口實現之后; 類似數據庫一樣運作在 Redis 上。你可以隨心所欲的實現它。這個接口中只有6-7 個方法。
它能存多少數據?不是太多,因為生產環境幾乎會拋棄所有的東西,修剪下來,你一次只能保存 100 個。
我們能從 Slack 收到通知嗎?我們正在努力。
我能退出 Bugsnag/etc.嗎? 可能不能。雖然它簡易且輕便,但并不意味著穩定健壯。小心火燭。
我們能否按照時間戳進行過濾?暫時還不能,但是這個是開源項目,幫幫我們
在系統引導階段會產生什么影響?每次只會執行一個查詢。生產環境中不會頻繁地把所有東西都插入進去。你可以取消你不關心的監聽器。
我們能在同一個UI中檢查多個應用嗎?可以;只需要在同一個數據庫中指向并記錄它們,然后考慮做標記/過濾, 這樣你就可以按需做區分了。
Laravel 的哪個版本能與之兼容? 5.7.7+。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29607.html
摘要:此問題稱為查詢問題。您將只執行兩個查詢而不是這是巨大的性能提升。這項工作是通過從數據庫中執行查詢完成的查詢可能涉及到表以及其他的一些表。比如查詢,視圖,時間等等另一個非常酷的工具是,對應用,有優雅的調試助手的美稱。 showImg(https://segmentfault.com/img/remote/1460000018339917?w=1280&h=722); 讓我們開始吧!假若你...
摘要:小紅要以最低成本最快速度推出版本,投放市場,收集反饋,持續迭代。總結在技能掌握充足的情況下,個人感覺開發效率要略高于。 我個人是比較不喜歡去正兒八經的比較兩個框架的,這樣沒有意義,不過欲善其事先利其器! 技術是相通的,但是在某個特定的領域的某個階段肯定有相對最適合的一個工具! 這里比較不是從技術角度比較,而是從公司技術選型考慮的,特別是初創的互聯網創業公司。沒辦法,誰讓互聯網公司離不開...
摘要:小紅要以最低成本最快速度推出版本,投放市場,收集反饋,持續迭代。總結在技能掌握充足的情況下,個人感覺開發效率要略高于。 我個人是比較不喜歡去正兒八經的比較兩個框架的,這樣沒有意義,不過欲善其事先利其器! 技術是相通的,但是在某個特定的領域的某個階段肯定有相對最適合的一個工具! 這里比較不是從技術角度比較,而是從公司技術選型考慮的,特別是初創的互聯網創業公司。沒辦法,誰讓互聯網公司離不開...
摘要:我們有時會碰到一個場景,比如買車票,需要進行查詢車票剩余,這時候需要一個日期范圍,開始日期必須大于等于今天,結束日期必須大于等于開始日期。通過增加一個額外的字段,然后通過這個字段限制范圍。測試發現實際并不生效。 我們有時會碰到一個場景,比如買車票,需要進行查詢車票剩余,這時候需要一個日期范圍,開始日期必須大于等于今天,結束日期必須大于等于開始日期。 Version Laravel 5...
摘要:一個動作類,應該有一個能夠說明其功能的名字,比如等。如果需要對我們的動作類實現某種適配器模式,這是非常方便的。使用單動作類的好處小巧而單一的邏輯域能夠防止代碼重復并提高代碼的可重用性,保持穩定。易于針對各種場景進行獨立測試。 showImg(https://segmentfault.com/img/remote/1460000015208092); 當我們談論到應用程序的架構的時候,經...
閱讀 2037·2021-11-08 13:22
閱讀 2500·2021-09-04 16:40
閱讀 1144·2021-09-03 10:29
閱讀 1709·2019-08-30 15:44
閱讀 2120·2019-08-30 11:13
閱讀 2785·2019-08-29 17:07
閱讀 1963·2019-08-29 14:22
閱讀 1244·2019-08-26 14:00