如何追踪导致javascript错误并保存到日志的功能

时间:2012-10-11 06:30:39

标签: 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 

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

2 个答案:

答案 0 :(得分:2)

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

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

我与之交谈过的那些插入过大型项目的人,真的后悔了。

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

此外,我在可能的范围内(不是在任何地方)自动插入try catch,其余的错误都会被window.onerror捕获。

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

答案 1 :(得分: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...
}