美文网首页
前端错误监控

前端错误监控

作者: LHH大翰仔仔 | 来源:发表于2019-01-15 16:30 被阅读51次

前端错误监控

一、错误分类

1.运行时错误:这个错误往往是在写代码是造成的。如语法错误、逻辑错误等,这种错误一般在测试过程也能够发现。
2.资源加载错误:这个错误通常是找不到文件或者是文件加载超时造成的。

二、错误捕获

1.代码错误捕获

try…catch…

try{
  //运行可能出错的代码  
}catch(e) {
    //捕获错误
}

window.onerror

a.

window.onerror = function() {
  //捕获错误  
}

b.

/**
同步错误
 * @param {String}  msg    错误信息
 * @param {String}  url    出错文件
 * @param {Number}  row    行号
 * @param {Number}  col    列号
 * @param {Object}  error  错误详细信息
 */
 window.onerror = function (msg, url, row, col, error) {
  console.log('我知道错误了');
  console.log({
    msg,  url,  row, col, error
  })
  return true;
};
error

c.

//异步错误
window.onerror = function (msg, url, row, col, error) {
  console.log('我知道异步错误了');
  console.log({
    msg,  url,  row, col, error
  })
  return true;
};
setTimeout(() => {
  error;
});

需要注意的是,window.onerror函数只有在返回 true的时候,异常才不会向上抛出,否则即使是知道异常的发生控制台还是会显示Uncaught Error: xxxxx

由于网络请求异常不会事件冒泡,因此必须在捕获阶段将其捕捉到才行,但是这种方式虽然可以捕捉到网络请求的异常,但是无法判断HTTP的状态是404还是其他比如500等等,所以还需要配合服务端日志才进行排查分析才可以。

<script>
window.addEventListener('error', (msg, url, row, col, error) => {
  console.log('我知道 404 错误了');
  console.log(
    msg, url, row, col, error
  );
  return true;
}, true);
</script>
<img src="./404.png" alt="">

在实际的使用过程中,onerror主要是来捕获预料之外的错误,而try-catch则是用来在可预见情况下监控特定的错误,两者结合使用更加高效。

2.资源加载错误

Object.onerror

var img=document.getElementById('#img');
img.onerror = function() {
  // 捕获错误  
}

利用windowerror事件代理,但是需要注意的是error事件是不冒泡的,可以使用事件捕获进行代理

 window.addElementListener("error",function(){
  // 捕获错误
},true);

三、错误上报

常见的错误上报有两种:ajax、image对象(推荐)

ajax上报就是在上文注释错误捕获的地方发起ajax请求,来向服务器发送错误信息

利用image对象

function report(error) {
var reportUrl = 'http://xxxx/report';
new Image().src = reportUrl + '?' + 'error=' + error;
}

四、跨域js文件错误获取

跨域js文件获取是有限制的,如果想获取其他域下的js错误需要再script标签中添加crossorgin属性,然后服务器要设置header('Access-Control-Allow-Origin');
// http://localhost:8080/index.html
<script>
  window.onerror = function (msg, url, row, col, error) {
    console.log('我知道错误了,也知道错误信息');
    console.log({
      msg,  url,  row, col, error
    })
    return true;
  };
</script>
<script src="http://localhost:8081/test.js" crossorigin></script>

// http://localhost:8081/test.js
setTimeout(() => {
  console.log(error);
});
欢迎关注

相关文章

  • 前端监控体系建设

    前端监控体系主要分为错误监控、性能监控、业务监控及安全监控三个方面。 一、错误监控 (一)监控范围 js语法错误、...

  • Fundebug前端JavaScript插件更新至1.2.0

    摘要: Fundebug的前端JavaScript错误监控插件更新至1.2.0:支持监控WebSocket连接错误...

  • 前端异常监控

    为什么要做前端异常监控 有些问题只存在于线上特定的环境 后端错误有监控,前端错误没有监控 基本实现 参考我们nod...

  • 前端监控插件

    1、简介 monitorjs_horse 是一款前端监控工具,主要包含下面几个方面信息监控: 1)前端错误异常监控...

  • 前端错误监控

    前端错误的分类: 1、即使运行错误(js代码错误) 2、资源加载错误。 错误的捕获方式 1、即使运行错误(js代码...

  • 前端 错误监控

    错误类型: (1)代码错误/即时错误:(2)资源加载错误 错误监控方法 即时错误:try....catch.......

  • 前端错误监控

    前端错误监控 一、错误分类 1.运行时错误:这个错误往往是在写代码是造成的。如语法错误、逻辑错误等,这种错误一般在...

  • 前端错误监控

    怎么做错误监控?如何保证产品质量? 错误分类 即时运行错误,代码错误 资源加载错误 错误的捕获方式 即时运行错误捕...

  • 一步一步搭建前端监控系统:JS错误监控篇

    摘要: 徒手写JS错误监控。 作者:一步一个脚印一个坑 原文:搭建前端监控系统(二)JS错误监控篇 Fundebu...

  • window.onerror的总结

    最近一直在做前端js错误监控的工作,在不断的打磨和完善中,发现里面还是知识点不少,现在就前端js错误监控做一些笔记...

网友评论

      本文标题:前端错误监控

      本文链接:https://www.haomeiwen.com/subject/olmydqtx.html