您的位置:首页 > Web前端 > JavaScript

javascript把前端错误记录到后台服务器

2015-11-06 14:10 155 查看
开发 Web 应用程序过程中的一种常见的做法,就是集中保存错误日志,以便查找重要错误的原因。

例如数据库和服务器错误都会定期写入日志,而且会按照常用 API 进行分类。在复杂的 Web 应用程序中,我们同样推荐你把 JavaScript 错误也回写到服务器。换句话说,也要将这些错误写入到保存服务器端错误的地方, 只不过要标明它们来自前端。把前后端的错误集中起来, 能够极大地方便对数据的分析。要建立这样一种 JavaScript 错误记录系统,首先需要在服务器上创建一个页面(或者一个服务器入口点) ,用于处理错误数据。这个页面的作用无非就是截获url然后从查询字符串中取得数据,然后再将数据写入错误日志中。这个页面可能会使用如下所示的函数:

function logError(sev, msg){
var img = new Image();
img.src = "log.php?sev=" + encodeURIComponent(sev) + "&msg=" + encodeURIComponent(msg);//只要为image对象设置src属性值,即可完成请求,图片预加载也使用了image的这个特性
}


这个 logError() 函数接收两个参数:表示严重程度的数值或字符串(视所用系统而异)及错误消息。

其中,使用了 Image 对象来发送请求,这样做非常灵活,主要表现如下几方面:

1、所有浏览器都支持 Image 对象,包括那些不支持 XMLHttpRequest 对象的浏览器。

2、可以避免跨域限制。通常都是一台服务器要负责处理多台服务器的错误,而这种情况下使用XMLHttpRequest 是不行的。

3、在记录错误的过程中出问题的概率比较低。大多数 Ajax 通信都是由 JavaScript 库提供的包装函数来处理的,如果库代码本身有问题,而你还在依赖该库记录错误,可想而知,错误消息是不可能得到记录的。

只要是使用 try-catch 语句,就应该把相应错误记录到日志中。来看下面的例子。

for (var i=0, len=mods.length; i < len; i++){
try {
mods[i].init();
} catch (ex){
logError("nonfatal", "Module init failed: " + ex.message);
}
}


在这里,一旦模块初始化失败,就会调用 logError() 。第一个参数是 “nonfatal” (非致命) ,表示错误的严重程度。第二个参数是上下文信息加上真正的 JavaScript 错误消息。记录到服务器中的错误消息应该尽可能多地带有上下文信息,以便鉴别导致错误的真正原因。

如果想看代码的话,可以参看下面这篇文章:

/article/5727665.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: