美文网首页前端知识点
前端错误收集(Vue)

前端错误收集(Vue)

作者: merrylmr | 来源:发表于2020-03-22 18:19 被阅读0次

前言

对开发者:为了更快速的定位及解决bug,减少 JS Error 的错误量;
对用户体验:让用户更加流畅的使用我们的产品,减少用户反馈时间,让尽量少的用户遇到这样的场景就把问题修改掉,保证尽量多的用户可以正常使用;
对产品:不断发现产品的问题,提升产品质量。

所以前端错误收集,必不可少。

调研了现存的错误监控方案,现将相关的知识点整理如下

  • JS异常处理的方式
  • vue项目的异常处理
  • 错误上报
  • 常见错误消息
  • 错误监控产品

JS异常处理的方式

前端错误类型:语法错误、运行错误;

语法错误:语法错误不会通过解析器,他会被标记为非法的JS并报告在控制台中。
看一下这个代码,却少右括号,所以是一个语法错误。控制台会打印出Uncaught SyntaxError: missing ) after argument list(…)

var alarm = "Dragons approach!"; 
alert(alarm

运行错误:

alert(alarm);

这段代码是语法正确的,但是在C语言中,alarm是没有定义的,会被报告语法错误,所以静态语言的查错能力提前了,在程序编译的时候就会指出这种错误,但是JS没有这种能力,在解析器尝试运行这段代码的时候,会抛出“run-time error”。

try-catch

通过catch捕获到错误,做一些处理(上报错误)

 try {
        msg
    } catch (e) {
        console.log('catch error!');
        console.log(e)
    }

限制:无法捕获语法、异步错误,但是:可以捕获async await错误

  • 语法错误
 try {
  // 括号未闭合
    console.log('error'
  } catch (e) {
    console.error('try-catch', e);
  }

  • 异步错误
 try {
    setTimeout(() => {
      throw '出错啦!';
    }, 1000)
  } catch (e) {
    console.error(e);
  }

捕获async-await

  function p() {
    let x = new Promise((resolve, reject) => {
      reject('出错啦!')
    })
    return x;
  }

  async function f() {
    try {
      await p();
    } catch (e) {
      console.error('try-catch', e);
    }
  }
  f();

运行结果


window.onerror

优点:可以捕获异步错误

window.onerror=function(errMsg,url,row,col,error){
  console.log({msg, url, row, col, error});
 return true
}

限制:不能捕获资源加载错误错误

<script>
  window.onerror = function (msg, url, row, col, error) {
    console.log({
      msg,  url,  row, col, error
    })
    return true;
  };
</script>
<img src="./404.png">

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

addEventListener(error,handle)

优点:除了onerror捕获的错误之外,还可以捕获资源加载错误

    window.addEventListener('error', (e) => {
        console.log(e, e.message)
    },true)

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

addEventListener("unhandledrejection",handle)

捕获未catch 的 promise 错误

vue项目的异常处理

vue提供了一个全局配置 errorHandle,,用于收集Vue运行时发生的错误。

Vue.config.errorHandler = function (err, vm, info) {
  // handle error
  // `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
  // 只在 2.2.0+ 可用
 let componentName = formatComponentName(vm);
}
// 获取组件的名称
  function formatComponentName(vm) {
    if (vm.$root === vm) return 'root';
    let name = vm._isVue
      ? (vm.$options && vm.$options.name) ||
      (vm.$options && vm.$options._componentTag)
      : vm.name;
    return (
      (name ? 'component <' + name + '>' : 'anonymous component') +
      (vm._isVue && vm.$options && vm.$options.__file
        ? ' at ' + (vm.$options && vm.$options.__file)
        : '')
    );
  }

拿到vue对应的实例之后,就可以获取vue对应的组件名称,定位到是哪一个组件报错;

常见错误消息

  • Script error.
    引入与当前不同源的资源,脚本出错时,就报此错误消息;
    解决方案:
    1.同源化
将js代码内联到html文件中
将js文件与html文件放到同一域名下

以上方式能够简单直接地解决问题,但也可能带来其他影响,如内联资源不好利用文件缓存,同域无法充分利用cdn优势等等。
2.跨源资源共享机制( CORS )

<script src="http://127.0.0.1:8077/main.js" crossorigin></script>

服务端也需要支持跨域资源共享

 Access-Control-Allow-Origin:*
  • ResizeObserver loop limit exceeded
    在升级chrome64版本之后会报这个错误,可以忽略这个错误;
    这个是提示你无法在单帧动画所有的observers,不会导致程序中断
    https://segmentfault.com/q/1010000015836349

错误上报

我们的项目实现方案:
请求错误上报的api:上报公司的错误平台,然后通过钉钉机器人向相应人员发送消息。


image.png

钉钉开发者文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

error-log

https://github.com/merrylmr/error-log

错误监控产品

参考文章

相关文章

  • 前端错误收集(Vue)

    前言 对开发者:为了更快速的定位及解决bug,减少 JS Error 的错误量;对用户体验:让用户更加流畅的使用我...

  • vue中全局错误捕获方法

    Vue全局配置 errorHandler可以进行全局错误收集,我们可以根据这个特性对前端异常做这样的处理:业务错误...

  • 性能优化

    一个开源的前端错误收集工具 frontend-tracker,你值得收藏~ 蒲公英团队最近开发了一款前端错误收集工...

  • 前端错误收集脚本

    前端错误分为 JS 运行时错误、接口错误、资源加载错误三种。对于前端的异常捕获,我们都会知道 onerror 事件...

  • 前端代码错误收集

    前端的异常收集常用的两种方式: 原文地址 1.try catch 使用一个webpack的loader babe...

  • DIY一个Web前端异常收集器

    一、背景 最近加入了一个刻意练习小组,自选了一个课题。题目:《实现一个前端异常收集器》目标:收集前端的各类错误,包...

  • 前端异常日志监控 - Sentry使用

    使用Sentry进行错误日志的捕捉,以便在前端运行发生错误的时候,可以直接定位到错误的位置。 初步配置 在Vue ...

  • 前端错误日志采集上报

    js-log-report 前端错误日志采集上报、上报给后端分析错误日、主要用于移动端各手机类型错误日志的收集分析...

  • 前后端分离式开发综述

    概述 本文包括:Vue开发技术栈简介;axios上传文件的方法举例;常见的前端错误码。 Vue开发技术栈简介 ...

  • 2019-11-05 前端文档链接收集

    本文主要用于个人前端文档收集 Vue组件库及相关教程 Ant Design of VueAnt Design Pr...

网友评论

    本文标题:前端错误收集(Vue)

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