前端错误监控

13 篇文章 0 订阅

为什么要有前端错误监控?

    为什么要有前端错误监控,它又能帮助你做什么?这个问题在我刚步入开发时根本没有听说过,那么今天就来讲讲。
    个人认为,前端错误监控和自身所参与的项目大小或者重要性存在着必要的联系。像我以前做的都是一些小平台小项目中,不是一些内部系统没有交易就是面向的客诉少,基本不构成用户体验投诉。而当项目业务逐渐拓展,客户人群、交易数额会自然递增。为留客、避免交易纠纷,要尽量做到早发现早解决,那么前端错误监控顺势而生。

前端有哪些监控的方法?

全局错误监控方法

window.onerror
<script>
  window.onerror = function(message, source, lineno, colno, error) {
    console.log('全局错误', message, source, lineno, colno, error);
    return true
  };
  console.log(a + b);
</script>
<img src="./img/xxx.png" alt="">
<script src="./main.js" crossorigin></script>

在这里插入图片描述
    从上述实例中可以看到window.onerror可以监控到变量未定义与js资源加载失败的错误,未监控到图片加载失败的错误。
    可能有小伙伴注意到了window.onerror函数体内的return true,那么我给大家把他删除再看一眼控制台。
在这里插入图片描述
    可以很明显的观察到控制台显示了红的错误信息。

window.addEventListener(‘error’,()=>{})
<script>
  window.addEventListener('error', (error) => {
    console.log('捕获到异常:', error);
  }, true)
  console.log(a + b);
</script>
<img src="./img/xxx.png" alt="">
<script src="./main.js" crossorigin></script>

在这里插入图片描述
    同理从上述实例中,我们可以看到此方法既监控到了变量未定义、js加载失败,也监控到了图片加载失败。不过此方法无法像window.onerror函数体内添加return true来屏蔽控制台错误。
    可能又有小伙伴注意到了window.addEventListener的第三个参数传了true,那么我给大家把他改为false再看一眼控制台。在这里插入图片描述    同理可以很明显的对比出控制台缺失了图片加载失败的错误信息。

window.addEventListener(‘unhandledrejection’,()=>{})
<script>
  window.addEventListener('unhandledrejection', function(evt) {
      console.log('unhandledrejection', evt)
  });
  new Promise((res, rej) => {
    rej(123)
  })
  console.log(a + b);
</script>
<img src="./img/xxx.png" alt="">
<script src="./main.js" crossorigin></script>

在这里插入图片描述
    此方法主要用于监控promise.catch错误,同样此处有一个疑问,实例中的promise没有写.catch,那么如果存在呢?

<script>
  window.addEventListener('unhandledrejection', function(evt) {
      console.log('unhandledrejection', evt)
  });
  new Promise((res, rej) => {
    rej(123)
  }).catch(err => {
    console.log('catch', err);
  })
  console.log(a + b);
</script>
<img src="./img/xxx.png" alt="">
<script src="./main.js" crossorigin></script>

在这里插入图片描述
    结果:window.addEventListener(‘unhandledrejection’,()=>{})监控的是未定义.catch的promise。

vue脚本错误监控errorHandler

    在main.js中定义errorHandler

app.config.errorHandler = (err, vm, info) => {
    let {
        message, // 异常信息
        name, // 异常名称
        script,  // 异常脚本url
        line,  // 异常行号
        column,  // 异常列号
        stack,  // 异常堆栈信息
    } = err;
    console.log('vue错误', {
        message, // 异常信息
        name, // 异常名称
        script,  // 异常脚本url
        line,  // 异常行号
        column,  // 异常列号
        stack,  // 异常堆栈信息
    }, vm, info)
};

    错误示例:

<template>
  <div>
    <button @click="arrpop">arrpop</button>
    <div>{{plusOne}}</div>
    <button @click="change(1)">add</button>
  </div>
</template>

<script>
import { ref, computed } from 'vue';
export default {
  name: 'App',
  setup() {
      const arrpop = (arg) => {
        arg.pop();
      }

      const count = ref('change')
      // 创建一个只读性计算属性,依赖于count值
      const plusOne = computed(() => count.value.slice(1))
      const change = (arg) => {
        count.value = arg;
      }
      

      return {
        arrpop,
        plusOne,
        change
      }
    }
}
</script>

在这里插入图片描述

局部错误监控方法

  • promise.catch
  • try catch

    局部错误监控可在可疑代码处自行添加上报,不做展开讲解。

上报方式有哪些

  1. 通过 ajax 上报,但是 ajax 请求也有可能会发生异常或跨域问题,所以此方法不推荐。
  2. 通过img上报。
let img = new Image();
img.src = api + '&errData=' + encodeURIComponent(encodeURIComponent(errData));
img = null;

总结

目录就是总结,哈哈哈哈。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风舞红枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值