2014-01-21 48 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

相关问题