繁体   English   中英

如何从Electron的控制台中自动记录警告和错误?

[英]How can I automatically log warnings and errors from the console in Electron?

我想将这些自动生成的错误和警告记录在我的应用程序中,以便调试用户遇到的问题,但是到目前为止,我还没有找到记录这些问题的解决方案。 有人知道一个包或方法吗?

谢谢。

基本思想是通过订阅window.onerror来侦听错误:

window.onerror = function (msg, url, lineNo, columnNo, error) {
  // log to your server

  return false;
}

但是某些浏览器并不总是为您提供堆栈跟踪,因此您必须使用try catch包装位于堆栈链顶部的函数调用:

function wrapErrors(fn) {
  // don't wrap function more than once
  if (!fn.__wrapped__) {
    fn.__wrapped__ = function () {
          try {
        return fn.apply(this, arguments);
      } catch (e) {
        logErrorToYourServer(e); // report the error
        throw e; // re-throw the error
      }
    };
  }

  return fn.__wrapped__;
}

var invoke = wrapErrors(function(obj, method, args) {
  return obj[method].apply(this, args);
});

invoke(Math, 'highest', [1, 2]); // no method Math.highest

该函数必须被调用:

  • 在您的应用程序开始时(例如在$ {document).ready中,如果您使用jQuery)
  • 在事件处理程序中,例如addEventListener或$ .fn.click
  • 基于计时器的回调,例如setTimeout或requestAnimationFrame

例如:

$(wrapErrors(function () { // application start
  doSynchronousStuff1(); // doesn't need to be wrapped

  setTimeout(wrapErrors(function () {
    doSynchronousStuff2(); // doesn't need to be wrapped
  });

  $('.foo').click(wrapErrors(function () {
    doSynchronousStuff3(); // doesn't need to be wrapped
  });
}));

(从哨兵的博客文章中无耻复制的代码)

您可以在以下链接中找到更多信息:

也有商业产品

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM