现在我使用此代码将错误日志从用户保存到数据库
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
所以我不知道哪个函数会导致错误 如何追踪导致错误的最深层函数并将错误日志保存到数据库
答案 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...
}