2014-01-21 72 views
3

我有我的代碼中的情況,我需要跟蹤我的生產中的錯誤。爲什麼Ember.onerror()沒有捕獲Assertion Failed錯誤。

我用ember.js作爲我的框架。

要跟蹤生產中發生的錯誤,我使用了Ember.Onerror,它只提供任何功能錯誤跟蹤。

Ember.onerror = function(error) { 
    Em.$.ajax('/error-notification', 'POST', { 
    stack: error.stack, 
    otherInformation: 'exception message' 
    }); 
} 

但我想追查斷言失敗的錯誤,例如

* 因此未匹配您的應用程序的任何路由器的URL *

回答

3

有關於捕捉錯誤和斷言錯誤的灰燼甚少文檔。就我而言,我需要在進入生產之前在調試模式下將控制檯以外的這些異常可視化。所以,我去了GitHub的Ember項目,找到了Ember.onerror(error){...}和Ember.assert(desc,test){...}函數的規範和實現,然後我寫了我的在我決定命名errorHandler的新適配器(app/initializers文件夾)的初始化函數內部的這些函數的自己版本。

Ember.assert = function(desc, test) { 
    if (!test) { 
     console.log('This is a test to log Assertions!'); 
     /* your assertion treatment code goes here*/ 
     throw new Ember.Error("Assertion Failed: " + desc); 
    } 
} 

...並通過拋出新Ember.Error(...)你實際上是在呼籲:

Ember.onerror = function(error) { 
    console.log("An error has occurred in ember: " + error.message); 
    /* your error treatment code goes here*/ 
}; 
0

Ember的構建工具剝離出來的斷言/調試調用,例如Ember.assert(),所以如果您使用的是ember.prod.jsember.min.js,您將無法得到斷言。

API docs for Ember.assert()

定義斷言如果條件 得不到滿足,將拋出異常。執行生產構建時,Ember構建工具將刪除對Ember.assert() 的任何調用。例如:

// Test for truthiness 
    Ember.assert('Must pass a valid object', obj); 
    // Fail unconditionally 
    Ember.assert('This code path should never be run') 
+1

所以灰燼不會引發任何斷言在生產建設失敗的錯誤。這對我的情況也是如此。但我的問題是如果我想追查斷言錯誤。儘管它拋出或不拋出。我需要讓他們跟蹤......以便我可以檢查由於這些類型的故障而發生的停機時間。任何解決方案 – sam

相關問題