# 错误监控以及上报

# 1、如何设计 5W1H

  • What: 发生了什么错误:逻辑错误、数据错误、网络错误、语法错误
  • When: 出现的时间段,如时间戳
  • Who: 影响来多少用户,包括报错事件数、IP、设备信息。
  • Where: 出现的页面是哪些,包括页面、广告栈、媒体
  • Why: 错误的原因是什么,报错错误堆栈、行列、SourceMap
  • How: 怎么定位解决问题,我们还需要手机系统等信息。

# 2、错误类型

# JS执行错误

# 网络错误

  • Javascript语法错误,代码异常
  • AJAX请求异常
  • 静态资源加载异常
  • Promise异常
  • 跨站脚本错误
  • 页面崩溃
  • 框架错误

# 3、收集错误

# 1/try/catch

try/catch可以捕获常规运行时错误,语法错误和异步错误不行。

# 2/window.onerror

当JS运行时错误发生,window会触发一个ErrorEvent接口的error事件。

可以捕获:常规运行时错误、异步错误

不能捕获:语法错误、资源加载错误

# 3/window.addEventListener

当一项资源(如图片或脚本)加载失败,加载资源的元素会触发一个 Event 接口的 error 事件, 这些 error 事件不会向上冒泡到 window,但能被捕获。而window.onerror不能监测捕获。

可以捕获:图片、script、 css加载错误 不可以捕获: new Image()、fetch请求

# 4/window.addEventListener('unhandledrejection'') 捕获promise的错误

当Promise 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection 事件; 这可能发生在 window 下,但也可能发生在 Worker 中。 这对于调试回退错误处理非常有用。

// 全局统一处理Promise
window.addEventListener("unhandledrejection", function(e){
  console.log('捕获到异常:', e);
});
fetch('https://tuia.cn/test')

# 5/页面崩溃

可以监听window对象的load和beforeunload事件,并结合sessionStorage对页面崩溃实施监控

# 6/框架的错误

react使用componentDidCatch来处理错误。

框架会通过console.error的方式来输出,可以劫持console.error来监听这些报错信息。

# 4、错误上报

考虑的点

  • 独立的域名,跨域
  • 何时上报,在页面稳定后进行上报,不要阻塞页面解析以及渲染。进行合并。

方案

Last Updated: 5/23/2022, 8:27:52 PM