軟體異常追蹤利器Bugsnag使用詳解
本文由碼農網 – 付輝原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
我們每個人都在追求建立一個無bug的應用程式,但這卻是不可能的。所以我們需要隨時監控程式中出現的問題,並且立即採取相應措施。一些公司已經試著在解決這個問題:如何能夠快速方便的監控錯誤、解決錯誤。Bugsnag 可以說是他們中比較優秀的了。Bugsnag的官網地址:https://bugsnag.com
他們所關注的重點:如何提供一個bug監控和通知系統,讓你及時感知到錯誤的發生以及與錯誤相關的具體內容,幫助你通過多種途徑來解決問題。接下來我們將去探索Bugsnag ,我們已經將其整合到一個Laravel框架的應用程式中,你可以從GitHub上下載示例Demo,跟著文章一起來探索。GitHub上下載的地址:https://github.com/Whyounes/bugsnag_demo
安裝示例專案
按照下面步驟去建立這個demo程式(前提是你本地已經有PHP的執行環境。這裡提供一個參考: )
// clone the repo git clone git@github.com:Whyounes/bugsnag_demo.git cd bugsnag_demo // update dependencies composer update // migrate and seed the database php artisan migrate && php artisan db:seed
在BugSnag上建立賬戶
在使用BugSnag之前,我們首先需要建立一個賬戶,同時建立我們的新專案。你能夠免費使用30天(現在已經修改為15天),對於是否要切換到付費,則依賴你的專案了。註冊成功之後,你就不得不建立新的專案,同時需要指定專案的型別。在我們的例子中,專案型別就是PHP。
新增BugSnag到我們的專案
Bugsnag針對不同的專案型別提供了一個通知列表。我們需要安裝配置PHP的通知包。另外, 因為提供的Demo是使用Laravel 4版本開發,但你可能使用了這個Laravel版本的安裝包,輕輕鬆鬆通過這個整合指導建立了你自己的專案。因為你安裝的版本是5.0+,所以在這種的情況下,我們儘量 使用跟框架無關的方法。
安裝Bugsnag包
$ composer require bugsnag/bugsnag:2.*
在bugsnag的控制皮膚裡選擇Settings > Project Settings,獲取專案的API key。可以將key儲存為一個環境變數,或者存放在程式的配置檔案中。專案中我們將它新增到app/config/app.php檔案中。
// app/config/app.php return array( // ... 'bugsnag_api_key' => 'YOUR KEY' // ... );
在app/start/global.php檔案中,我們將專案和bugsnag客戶端進行繫結並配置bugsnag。
// app/start/global.php App::singleton('bugsnag', function() { $bugsnag = new Bugsnag_Client( Config::get('app.bugsnag_api_key') ); return $bugsnag; }); // ...
Bugsnag依賴注入的設定會發生變化,這取決於的你的應用程式配置。上面的程式碼案例對於Laravel 框架的專案非常普遍。此外,你也可以設定一個監控的發版階段,比如開發階段或者生產階段。
$bugsnag->setReleaseStage(App::environment());
使用上述程式碼,bugsnag就只會記錄應用程式在指定發版階段的問題。
建立了Bugsnag客戶端之後,需要將其和程式中的錯誤處理相關聯,這也取決於程式中處理異常和錯誤的機制。Laravel提供了fatal和error方來來接受回撥的處理函式(即當錯誤發生是呼叫的處理函式),同時你也可以使用PHP的set_exeception_handle和set_error_handle方法。
// app/start/global.php App::error(function($exception) { App::make('bugsnag')->notifyException($exception, null, "error"); }); App::fatal(function($exception) { App::make('bugsnag')->notifyException($exception, null, "error"); });
上述notifyException方法可以接收附加的後設資料作為第二個引數。第三個引數是錯誤的等級,預設為warning。如果你想將其直接關聯到PHP的錯誤和異常處理的話,也可以執行如下操作:
$bugsnag = App::make('bugsnag'); set_error_handler(array($bugsnag, 'errorHandler')); set_exception_handler(array($bugsnag, 'exceptionHandler'));
配置Bugsnag
將使用者的詳細資訊新增到error記錄中。
預設情況下,Bugsnag的記錄中會有登入使用者的唯一標識,但是你可以通過修改Bugsnag客戶端例項來改變。
// app/start/global.php App::make('bugsnag')->setUser([ 'email' => Auth::check() ? Auth::user()->email : 'Guest user' ]);
選擇user標籤,在錯誤的詳細資訊裡,可以看到使用者的標識了。(下面記錄的資訊是使用者的郵箱)
在向伺服器傳送ERROR物件之前,通過呼叫setBeforeNotifyFunction函式可以對其進行修改,該方法接受一個回撥函式作為引數。
// app/start/global.php App::make('bugsnag')->setBeforeNotifyFunction(function($error) { $error->setMetaData([ "user" => [ "username" => Auth::check() ? Auth::user()->username : 'Guest user' ], "metrics" => [ "Metric 1" => "Some data here" ] ]); });
看下面的截圖就會發現,我們使用標籤列表對錯誤的詳細資訊進行了分組。你可以更新這些標籤,或者新增一個新標籤。
為避免洩露使用者或應用程式的敏感資料,可以在Bugsnag例項中新增你要過濾的屬性列表。這些屬性的值在控制皮膚上就會替代為FILTERRD。(下面是過濾了password的程式碼)
// app/start/global.php App::singleton('bugsnag', function() { $bugsnag = new Bugsnag_Client( Config::get('app.bugsnag_api_key') ); $bugsnag->setFilters([ 'password' ]); return $bugsnag; }); // ...
Bugsnag的控制皮膚
在我們建立了Bugsnag賬戶並將它關聯到我們的程式之後,我們需要去訪問控制皮膚來探索Bugsnag所提供的不同元件功能。我們選擇Inbox檢視的話,會顯示一個錯誤列表,並可以對其進行篩選。我們還可以切換到timeline 圖表頁,可以通過檢視文件來獲取更多的詳細資訊。
生成一些錯誤
在問題檢視模板內部,顯示了發生問題的使用者名稱。該使用者被刪除將會引起一個問題,丟擲一個錯誤(試圖去獲取非物件的屬性)。如果大量的使用者訪問了這個問題頁(可以通過多次訪問同一個頁面來模擬這種情況),太多相同的錯誤會將控制皮膚弄得凌亂不堪。如果你使用artisan db:seed 命令來填充資料庫,你將一個問題分配給一個使用者通過資料庫中不存在的id。
其實我們並不用擔心:控制皮膚上會顯示那麼多重複的錯誤,需要我們專門給錯誤進行分組。Bugsnag在解析完錯誤之後,將會自動判斷他所處理的錯誤是重複的錯誤還是新錯誤。
我們可以在訪問物件的使用者名稱屬性時,通過增加一個簡單的判斷,來修復這個錯誤。
// app/views/user/questions.blade.php // ... {{ isset($question->user) ? $question->user->username : 'User deleted' }} //...
過濾
為了能夠調查發生的問題,Bugsnag提供給了我們一組過濾器來向下鑽取資料並收集有關該問題根源的具體細節資訊
通過頂部過濾條中的日期範圍選擇器,你能夠按照時間對錯誤進行過濾。或者選擇all來檢視所有的錯誤。
通過資料來過濾錯誤是一個比較好的途徑,像使用者,錯誤狀態,嚴重程度,指派給誰等。你可以檢查Bugsnag文件檢視支援的過濾器列表。Bugsnag會解析你傳送的錯誤資訊,這也有助於自動完成要搜尋的條目,比如主機名,發版階段等。
新增合作開發者
這將是一個好的機會,對於你的專案或者你管理的專案,你都不是一個人在工作。通過點選頁面右上角的collaborators 連結,你就可以新增專案的合作開發者了。
Bugsnag會解析錯誤,並對錯誤進行分組來避免出現重複的錯誤列表。選擇一個錯誤後,你可以將它指派給一個已經存在的合作開發者,或者邀請一個新的合作開發者。
錯誤狀態
在控制面的左側邊欄顯示了通過狀態進行分組的錯誤列表(開啟,處理中,已修復,延後處理,忽略)。選中其中一個錯誤,你就可以對它的狀態進行修改了。
預設情況下,Bugsnag將僅僅顯示處於開啟狀態的錯誤,來幫助我們確定目前活躍的錯誤。通過使用前面提到的過濾器,你也可以改變這一點。
延期和忽略錯誤
如果你有一個錯誤頻繁發生,你的團隊正在對它做修復。你能夠修改觸發該錯誤的頻率或者指定一個條件來觸發該錯誤。
如果你想去忽略這個錯誤,你可以使用操作選單上snooze選項旁邊的ignore按鈕來實現。但是並不推薦你這麼做。
第三方通知
專案團隊在開發過程中經常會使用多個應用程式和服務。Bugsnag提供了一個通知外掛列表,我們能夠配置其為不同型別的錯誤傳送通知。你能夠在Slack上通知你的團隊,在Github建立問題,提交到你服務的webhook上等。
Slack通知
導航到專案的Settings ,點選 Team Notifications連結,會顯示一個已經整合的列表,然後選擇Slack。
我們需要指定什麼時候應該通知我們和錯誤發生的頻率。然後我們需要通過點選輸入框上邊的link,來獲取我們的Slack webhook URL,複製URL連結到文字框,點選測試。
在Github上建立問題
另一種作用於錯誤通知的方式就是建立一個新的Github問題。導航到Settings,點選Issue Tracker 連結,顯示已經整合的列表,選擇其中的Github issues
總結
Bugsnag提供了一個很好的平臺,實現了錯誤的自動跟蹤,節省了我們花費在處理日誌和建立監控的指令碼上的時間等。你可以在專注於構建應用程式的同時,密切關注你釋出版本的情況。
Bugsnag已經吸引了一些大公司,比如Github, Cisco, Linkedln等。你可以通過15天的免費使用來探索其可用的功能。如果你真的喜歡它,可以考慮付費服務。如果你正在使用別的錯誤監控平臺,或者你已經嘗試過了Bugsnag,也請你知道我們你的看法。
譯文連結:http://www.codeceo.com/article/bugsnag-usage.html
英文原文:Introducing Bugsnag – the Last Error Monitor You’ll Need
翻譯作者:碼農網 – 付輝
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 路由追蹤命令詳解路由
- 網路安全追蹤利器IpTicker
- 分散式鏈路追蹤的利器——Zipkin分散式
- cpp異常詳解
- 如何使用專案問題追蹤軟體跟進管理專案
- Java記憶體分析利器MAT使用詳解Java記憶體
- XCOrganizer for Mac - 專案標籤分配追蹤軟體Mac
- Klokki for mac(自動時間追蹤管理軟體)Mac
- Jaeger Client Go 鏈路追蹤|入門詳解clientGo
- 商城系統日誌與異常資訊追蹤機制設計_OctShop
- MySQL定義異常和異常處理詳解MySql
- 軟體伺服器異常怎麼解決,軟體伺服器異常怎麼檢測和解決伺服器
- SQL追蹤和事件追蹤SQL事件
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- 使用 CSS 追蹤使用者CSS
- Day27:異常詳解
- FTC 首次關閉銷售“追蹤者軟體”的公司
- OpenCV-Python實戰(16)——人臉追蹤詳解OpenCVPython
- 詳解C#異常處理C#
- Reactor詳解之:異常處理React
- python異常處理詳解Python
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- 使用dbms_system 追蹤sqlSQL
- 蘋果新專利:支援 Mac 和 iOS 的眼球追蹤軟體蘋果MaciOS
- 詳解ElasticAPM實現微服務的鏈路追蹤(NET)AST微服務
- golang 程式記憶體追蹤、分析Golang記憶體
- 追蹤演算法KCF體驗演算法
- 批次查快遞單號的軟體有哪些,追蹤快遞什麼軟體好用
- 輕量級的分散式日誌追蹤利器,十分鐘即可接入,從此日誌追蹤無難事分散式
- Java 異常處理上篇: Throwable 詳解Java
- [Java開發之路](5)異常詳解Java
- 使用 SonarQube 追蹤程式碼問題
- 一文詳解|Go 分散式鏈路追蹤實現原理Go分散式
- [系列] - go-gin-api 路由中介軟體 - Jaeger 鏈路追蹤(六)GoAPI路由
- [系列] - go-gin-api 路由中介軟體 - Jaeger 鏈路追蹤(五)GoAPI路由
- Python異常 ValueError的問題詳解PythonError
- 日誌追蹤
- 程式碼追蹤