javascript - 如何追踪导致 javascript 错误的函数并保存到日志

标签 javascript error-handling

现在我使用此代码将错误日志从用户保存到数据库

window.onerror = function (msg, url, line) {
    $.ajax({
        type: "POST",
        url: "call/savelog.php",
        data: {
            type : "bug\n" + version,
            message : 'Error message: '+msg+'\nURL: '+url+'\nLine Number: '+line
        }
    });
    return true;
};

当jquery或kineticjs函数发生错误时

如果是在 javascript 控制台中我会得到类似的东西

Uncaught TypeError: Cannot read property '_id' of undefined kinetic-v4.0.2.js:1386
Kinetic.Node.remove kinetic-v4.0.2.js:1386
Kinetic.Layer.remove kinetic-v4.0.2.js:3667
drawCountdown side_play.js:105

这样我就会知道我的 javascript 文件 side_play.js 中的 drawCountdown 函数导致的错误
但它在我的错误日志中看起来像这样

Error message: Uncaught TypeError: Cannot read property '_id' of undefined
URL: https://myurl.com/js/kinetic-v4.0.2.js
Line Number: 1386 

所以我不知道哪个函数导致了错误。
如何追踪到导致错误的最深层函数并将错误日志保存到数据库

最佳答案

您似乎正在使用 window.onerror 事件,这很好。我不建议在代码中的任何地方插入 try catch,我已经和很多记录 JavaScript 错误的人交谈过。当你开始插入 try catch 时。

  • 错过某些地方的风险很高
  • 正常的开发变得更加困难,因为你的 try catch 为开发人员隐藏了错误,你真正想要的是在生产中 try catch 而在开发中没有 try catch

与我交谈过的那些在大型项目中插入 try catch 的人都非常后悔。

你可以尝试我的项目Muscula ,它将尝试获取 javaScript 源文件,并显示导致错误的代码行。我认为这可以解决您的问题。

此外,我会在合理范围内(不是所有地方)的地方自动插入 try catch,其余错误由 window.onerror 捕获。

要使用 Muscula,您只需安装一个脚本(例如 Google Analytics),然后记录错误。我希望您尝试一下,让我知道它对您有何作用。目前 Muscula 处于公开测试阶段,可以免费使用。用于约。每天 4,000,000 次浏览量。

关于javascript - 如何追踪导致 javascript 错误的函数并保存到日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12833503/

相关文章:

c++ - 定义自己的异常类的最佳实践?

ruby-on-rails - 如何判断Rails异常会呈现哪个错误状态代码?

php - 谁能帮我弄清楚这段代码有什么问题?

javascript - Vue JS V-用于组件 react 性

javascript - 在 Meteor 模板中重新应用 JQuery

javascript - javascript: 递归函数在循环多次时崩溃

PowerShell - 为整个脚本设置 $ErrorActionPreference

javascript - 在 Google Cloud Functions 中使用 process.exit

javascript - 实现像 data-reactid 这样的系统

arrays - 无法强制解开非可选类型 'String'的值