腾讯云可观测平台 错误监控(React Native 应用场景)

Aegis 实例会自动对 JS 执行错误、Promise 执行错误、接口请求异常、返回码异常进行监控并上报。这里说明各错误监控的实现逻辑及处理方式。

相关产品
腾讯云可观测平台 产品页,含版本规格、价格与购买入口。

注意:仅引入 SDK 而未实例化时,Aegis 不会上报任何数据。

RN 环境没有 DOM,资源加载失败、WebSocket 异常、白屏监控等浏览器专属能力不适用于 RN,这篇不予覆盖。

一、JS 执行错误

RN 环境没有 window.onerror,Aegis 通过改写 RN 全局错误处理(ErrorUtils.setGlobalHandler)捕获应用中的 JS 执行错误,将错误信息及堆栈自动上报到后台。

上报内容格式为 错误信息 + 堆栈(${error}\\n${error.stack}),日志等级为 error(全量上报),达到阈值时自动告警并影响应用评分。

SDK 对 ErrorUtils.setGlobalHandler 做了防覆盖包装,实现了 SDK 监控逻辑与业务自身错误监听之间共存,互不丢失。

二、Promise 执行错误

Aegis 监听未被 catch 的 Promise 错误(unhandled rejection),按 JS 引擎能力自动选择采集通道:

运行环境 采集方式
Hermes 引擎(RN 0.64+ 默认) HermesInternal.enablePromiseRejectionTracker(allRejections: true)
旧版 RN(非 Hermes) promise/setimmediate/rejection-tracking polyfill

为了页面稳定性,建议你 catch 住所有 Promise 错误。

三、接口请求异常(XHR / Fetch)

Aegis 改写 XMLHttpRequest 与 fetch,监听每次接口请求,以下情况视为异常请求并上报(日志等级为 Ajax 请求异常):

1. http status 大于等于400;

2. 请求超时(timeout);

3. 请求结束时 http status 仍然是0(通常发生于请求失败,如网络错误、跨域、cancel 等)。

注意:Aegis SDK 在错误发生时不会主动收集接口请求参数和返回信息,如需对接口信息进行上报,可通过配置 api.apiDetail: true 开启(详见 配置文档)。

四、返回码异常(retcode)

Aegis 通过两种途径识别返回码异常:

·接口响应返回码

开启 reportApiSpeed: true 后,Aegis 会尝试从接口响应 body 的第一层(第一层取不到再取第二层)的 code、ret、retcode、errcode 中获取返回码,默认返回码为0视为正常、非0视为异常;返回码异常时会上报一条 retcode 异常日志(等级为返回码异常)。

可通过 api.retCodeHandler 自定义返回码获取逻辑与异常判定,详见 配置文档 中的 api.retCodeHandler 示例。

·Promise 拒绝携带的返回码(RN 特有)

部分网络请求库以 Promise reject 的方式抛出业务异常,错误对象形如:

{ error: { networkError: false, retcode: 500, },}

Aegis 在 Promise 错误采集通道中识别该结构:当 error.networkError 为 false 时,归类为返回码异常(RET_ERROR)上报;当 error.networkError 为 true 时视为纯网络错误,忽略不上报(避免与接口请求异常重复上报)。

赞 (0)
上一篇 5天前
下一篇 5天前