2

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

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 

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

4

2 回答 2

2

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

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

与我交谈过的那些尝试过大型项目的人,真的很后悔。

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

此外,我在合理的情况下(不是在任何地方)自动插入 try catch,其余错误由 window.onerror 捕获。

要使用 Muscula,您只需安装一个脚本,例如 Google Analytics,然后记录错误。我很乐意让你尝试一下,让我知道它对你有用。现在 Muscula 处于公开测试阶段,可以免费使用。使用在大约。每天 4.000.000 次浏览量。

于 2012-10-11T15:47:10.597 回答
0

您可以将函数包装在 try/catch 语句中,如果发生错误,您可以捕获错误,然后通过服务器将它们写入文件中。

try {
  yourFunctionCallHere();
} catch (err) {
   var message = 'yourFunctionCallHere failed: ' + err.message;
   //now you can do smth with this error message, for example send an ajax request to the server...
}
于 2012-10-11T06:52:23.073 回答