向服务器发送处理(不仅仅是未处理)Javascript错误

时间:2017-03-07 10:51:53

标签: javascript exception-handling

我试图将所有我的Javascript异常(处理以及未处理的异常)发送到服务器进行日志记录。我已经通过window.onerror documentationalso this post了解了这个问题,但它们最适合未处理的例外。

如果已在window.onerror块中处理了异常,则

catch()不会触发。

痛苦的'方法是将我的logToServer()函数手动附加到我的代码中的每个catch()块(并且它也有效),但我希望有更好的解决方案。

我在下方设置了一个小片段。



var logToServer = function logToServer() {
  console.info('logToServer() called');
};
window.onerror = function(z, x, c, v, b) {
  console.info(z);
  console.info(x);
  console.info(c);
  console.info(v);
  console.info(b);

  // call a function to send to server
  logToServer();
};
window.addEventListener('error', function(z, x, c, v, b) {
  console.info(z);

  // call a function to send to server
  logToServer();
});

// test w/o catch-block
//console.info(err); // calls logToServer()

// test w/ catch-block
try {
  console.info(asd); // does not call logToServer()
} catch (err) {
  console.error(err);
};

Enable logs in console.




1 个答案:

答案 0 :(得分:0)

只有在未处理异常时才会触发window.onerror。如果你发现任何异常,这个事件就不会发生。您必须在所有try-catch块中明确地执行此操作。在catch块中,您将不得不抛出异常。语法很简单:

try{
    //Your try logic
}
catch(ex){
   // Your catch logic comes here
   throw ex; //This will throw exception and window.onerror will be fired.
}