首页 鸿蒙 正文
  • 本文约1123字,阅读需6分钟
  • 106
  • 0

鸿蒙错误管理开发指导

温馨提示:本文最后更新于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');
  }
 

 

评论