错误监控
主进程错误监控
Aegis通过监听Node.js主进程的异常事件来实现JS错误监控:
监控方式
- uncaughtException事件:监听未被catch的JS执行错误
- unhandledRejection事件:监听未被catch的Promise执行错误
错误处理流程
当发生错误时,Aegis会自动:
- 格式化错误信息(使用
stringifyPlus) - 收集当前进程的内存和CPU使用情况
- 将错误信息、性能数据一起上报到后台
渲染进程错误监控
Aegis 的实例在初始化之后会自动进行以下监控:
- JS执行错误
- Promise执行错误
- 资源加载失败
启用API监控后,会自动监听以下异常:
- Ajax(Fetch)请求异常
- 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 的第一层(如果第一层取不到,再取第二层)的
code、ret、retcode、errcode中获取。 Aegis 默认 retcode 的值为0是正常的,非0都是异常的。当 retcode 发生异常的时候,会上报一个 retcode异常的日志。 用户可以通过api.retCodeHandler对这个值和是否异常进行修正。