错误搜集
错误搜集主要分为以下几类:
- JS 代码运行错误、语法错误等
- 异步错误等
- 静态资源加载错误
- 接口请求报错
错误捕获方式
- try/catch
- window.onerror
window.onerror 可以捕获常规错误、异步错误,但不能捕获资源错误 - window.addEventListener
当静态资源加载失败时,会触发 error 事件, 此时 window.onerror 不能捕获到 - unhandledrejection
Promise 中抛出的错误,无法被 window.onerror、try/catch、 error 事件捕获到,可通过 unhandledrejection 事件来处理
Vue
Vue.config.errorHandler vue 源码中 使用 try/catch 来捕获常规代码的报错,被捕获的错误会通过 console.error 输出而避免应用崩溃
可以在 Vue.config.errorHandler 中将捕获的错误上报
React
- React.errorBoundary react16 开始,官方提供了 ErrorBoundary 错误边界的功能,被该组件包裹的子组件,render 函数报错时会触发离当前组件最近父组件的 ErrorBoundary。
生产环境,一旦被 ErrorBoundary 捕获的错误,也不会触发全局的 window.onerror 和 error 事件
接口错误
针对浏览器内置的 XMLHttpRequest、fetch 对象,利用 AOP 切片编程重写该方法,实现对请求的接口拦截,从而获取接口报错的情况并上报