Skip to main content

错误监控

主进程错误监控

Aegis通过监听Node.js主进程的异常事件来实现JS错误监控:

监控方式

  • uncaughtException事件:监听未被catch的JS执行错误
  • unhandledRejection事件:监听未被catch的Promise执行错误

错误处理流程

当发生错误时,Aegis会自动:

  1. 格式化错误信息(使用stringifyPlus
  2. 收集当前进程的内存和CPU使用情况
  3. 将错误信息、性能数据一起上报到后台

渲染进程错误监控

caution

Aegis 的实例在初始化之后会自动进行以下监控:

  1. JS执行错误
  2. Promise执行错误
  3. 资源加载失败

启用API监控后,会自动监听以下异常:

  1. Ajax(Fetch)请求异常
  2. retcode异常

注意!是 Aegis 实例会进行监控,当您只是引入了 SDK 而没有将其实例化时,Aegis 将什么都不会做。

JS执行错误

Aegis 通过监听 window 对象上的 onerror 事件来获取项目中的报错,并且通过解析错误和分析堆栈,将错误信息自动上报到后台服务中。

Aegis遇到的问题可以先参考这篇文章:Aegis 使用指南

注意如果用户使用的是 vue 框架,请务必自己获取错误并且主动上报

Vue.config.errorHandler = function(err, vm, info) {
console.log(`Error: ${err.toString()}\nStack: ${err.stack}\nInfo: ${info}`);
aegis.error({
msg: err.toString(),
stack: err.stack,
info: info
});
};

Promise执行错误

通过监听 unhandledrejection 事件,捕获到未被 catch 的Promise错误,为了页面的健壮,建议您 catch 住所有的Promise错误哟。

资源加载失败

页面元素发出的请求如果失败,将会被 window.onerror 事件捕获到(捕获阶段),Aegis 正是通过这个特性监听的资源加载失败。Aegis监听了以下资源:

  • <link> 标签请求的css、font等;
  • <script> 标签请求的脚本;
  • <audio><video> 标签请求的多媒体资源;

Ajax(Fetch)请求异常

当用户开启 reportApiSpeed 参数后,Aegis 将会改写 XMLHttpRequest 对象和 fetch 对象,监听每次接口请求,Aegis 认为以下情况是异常情况:

  • http status 大于等于 400
  • 请求超时,abort,跨域,cancel
  • 请求结束时 http status 仍然是 0,通常发生于请求失败

注意:Aegis SDK 在错误发生的时候,不会主动收集接口请求参数和返回信息,如果需要对进口信息进行上报,可以使用 api 参数里面的 apiDetail 进行开启。

new Aegis({
id: '',
//...其他配置
reportApiSpeed: true,
api: {
apiDetail: true,
},
});

retcode异常

当用户开启 reportApiSpeed 参数后 Aegis 改写 XMLHttpRequest 对象和 fetch 对象,将获得API返回的内容,并尝试在内容中获取到本次请求的 retcode。

retcode 的值会从用户返回 response body 的第一层(如果第一层取不到,再取第二层)的 coderetretcodeerrcode 中获取。 Aegis 默认 retcode 的值为0是正常的,非0都是异常的。当 retcode 发生异常的时候,会上报一个 retcode异常的日志。 用户可以通过 api.retCodeHandler 对这个值和是否异常进行修正。