如何自動跟蹤 Angular.js 的異常

類別: IT

Angular.js取得的巨大成就之一是實用的異常丟擲,因為異常資訊經常能夠準確的表明你的程式碼為什麼崩潰了。執行於世界各地的眾多瀏覽器的大型客戶端web應用會面臨異常丟失的問題,而捕獲它就有可能修復 bug並贏得使用者。

當處理跨瀏覽器和裝置的問題時,接收這些異常資訊是很重要的,因為你的應用可能在你的開發機器上執行得正確可靠,但在你的使用者的瀏覽器上卻是另一番場景。

其解決方案是需要一個自動異常跟蹤服務,而Raygun通過接收你的Angular web應用丟擲的所有異常但不需要你做任何事,從而簡化了這項工作。它的設定真的很快--只需要按照以下步驟將Raygun hook到你的應用就可以了。

安裝

首先,下載小巧的Raygun4JS指令碼,並把它新增到你的專案中。有3個途徑獲得:

通過Bower

bower install raygun4js

從NuGet獲得——在Visual Studio中,開啟包管理器控制檯然後輸入:

Install-Package raygun4js

手動下載 – 點選此處下載dev版 或者壓縮過的版本

配置

接下來,引用這個指令碼。如果你使用靜態的HTML,將<script src="js/raygun.js" type="text/javascript"></script>新增到頁面裡面或新增到你的模組載入器中。

最後,在你的Angular主邏輯執行之前呼叫下面的程式碼來設定Raygun4JS:

Raygun.init('YOUR_API_KEY').attach();

你可以為每一個用Raygun建立的app生成一個API key,你可以在你的Raygun dashboard 中訪問他——你有30天免費試用時間來測試它。

在Angular中捕獲異常

至少有兩種方法將未處理的異常注射到Angular.js的模組中,通過使用decorator 或 factory。這兩種方式會為你提供$exceptionHandler的具體實現,我們上面所提到的Raygun4JS會將該實現傳送給Raygun。

使用一個裝飾器

裝飾器模式因其不會覆蓋掉原有的行為,所以很適合用來將行為注入到任意的服務中,以確保在其它所期望的特性中分離關注點,它也是記錄日誌和處理異常的理想方式. 在Angular.js中它可以使用在 $provide 服務中,我們將用來實現我們自己的 $exceptionHandler 函式:

app.config(function ($provide) {
  $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) {
    return function (exception, cause) {
      Raygun.send(exception);
      $delegate(exception, cause);
    }
  }])
});

$delegate 是異常處理器的實體,我們會呼叫它來獲得輸出到控制檯的原始行為.

你也可以按照自己的需要建立足夠多的其它服務:

$provide.decorator("$exceptionHandler", ['$delegate', '$log', function($delegate, $log) {
    return function (exception, cause) {
      $log.debug('Sending to Raygun');
      Raygun.send(exception);
      $delegate(exception, cause);
    }
  }])

依賴於所獲取到的自Angular邏輯中丟擲的錯誤是什麼型別, cause 引數得以被填充. 如果一個異常發生在一個工廠或者服務中,你可能會得到那個引數可以的範圍, 你可以將其作為自定義資料,通過替換掉上面的Raygun.send呼叫,附帶任何你需要的其它東西,再傳送到Raygun:

Raygun.send(exception, { cause: cause });

使用一個工廠

快速的將Raygun放到你的應用的異常處理器中的方法就是使用一個工廠, 儘管它會移除原來的控制檯日誌,而如果你想要保留此項功能的話,就會需要儲存原來的值並再一次呼叫它.

app.factory('$exceptionHandler', function () {
  return function (exception) {
    Raygun.send(exception);
  }
});

手動傳送錯誤

Raygun4JS 也歸於了你任意時間很容易的手動跟蹤錯誤的能力:

Raygun.send(new Error('my custom error'));

供應器上還有一堆其它使用的工具可以利用,包括獨特的使用者跟蹤,版本跟蹤,標籤及其它 – 這裡的文件可以檢視 的所有相信資訊.

Raygun 甚至可以在你的Angular應用中跟蹤jQuery 的Ajax錯誤even tracks jQuery Ajax errors ,而無需你的做任何額外的事情, 因此你將得到開箱即用的全面照顧.

準備好使用Raygun了嗎?

如之前所提及的,有一個 30天免費的無信用卡支付的版本可用, 因此你可以獲取一個來看看你的應用是否真的是在為你的使用者運作的. 如果就本文你有任何的疑問,請將它們留在下面的評論中。

如何自動跟蹤 Angular.js 的異常原文請看這裡