鸿蒙错误管理开发指导
温馨提示:本文最后更新于2024年10月15日 08:00,若内容或图片失效,请在下方留言或联系博主。
当应用的代码存在规范问题或错误时,会在运行中产生异常和错误,如应用未捕获异常、应用生命周期超时等。在错误产生后,应用会异常退出。错误日志通常会保存在用户本地存储上,不方便开发者定位问题。所以,应用开发者可以使用错误管理的接口,在应用退出前,及时将相关错误及日志上报到开发者的服务平台来定位问题。错误管理开发指导官方文档
1. 在UIAbility外创建一个存放故障id:
// 故障id 创建
let errorManagerId = -1
2. 在onCreate中注册错误观察器:
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
// 注册错误观察器,用于捕获一些未知的错误,注册成功后,应用在遇到未知的 ArKTS 错误时 不会闪退
errorManagerId = errorManager.on('error', { // 保存故障id
// 系统回调函数 应用注册后 当应用产生 未捕获错误(try catch) 的异常时回调
async onUnhandledException(errMsg) {
// errMsg 返回的错误日志 相对于 FaultLogger 返回的错误日志 比较少 所以直接调用FaultLogger 的错误日志输出
// 获取故障日志 开发期间 跟DevEco Studio 的-> FaultLog是一样的
const list = await FaultLogger.query(FaultLogger.FaultType.JS_CRASH) // FaultType.JS_CRASH 故障类型枚举
// AlertDialog.show({ // 输出打印错误信息
// message: JSON.stringify(list[0], null, 2) // 捕获第一条日志就可以了
// })
// 把错误信息上传到服务器 通过 AXIOS
await axios.post(BASE_URL + '/log/fault/report/batch', list[0])
promptAction.showToast({
message: '错误日志上传成功'
})
}
})
}
3. 在onDestroy中销毁错误观察器:
onDestroy(): void {
// 删除错误观察器(释放资源)
errorManager.off('error', errorManagerId) // 错误ID
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}