HarmonyOS鸿蒙Next中对于已经上线的应用如何实现日志的收集与分析

HarmonyOS鸿蒙Next中对于已经上线的应用如何实现日志的收集与分析 如果用户发现应用出现bug,怎样才能反馈日志

8 回复

方案一:使用APMS监测现网应用的崩溃(CPP CRASH、JS ERROR)、应用无响应(APP FREEZE)等稳定性指标,以及应用的启动、页面加载、耗电等性能指标,可参考文档:https://developer.huawei.com/consumer/cn/doc/app/agc-help-apms-introduction-0000002236333914?ha_source=sousuo&ha_sourceId=89000251 ,方案二:使用阿里云三方SDK采集鸿蒙设备日志数据,可参考阿里云官方文档:https://help.aliyun.com/zh/sls/developer-reference/harmonyos-sdk-overview?spm=a2c4g.11186623.help-menu-28958.d_9_4_19_0.35d6353aF59R1t&scm=20140722.H_2701738._.OR_help-T_cn

更多关于HarmonyOS鸿蒙Next中对于已经上线的应用如何实现日志的收集与分析的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


对于已经上线的 HarmonyOS NEXT 应用,现在行业里一般不会让用户手动导出日志再发给开发者,而是采用:

应用埋点
+
崩溃收集
+
故障日志上传
+
用户反馈入口

四层方案。


第一层:Crash 自动收集(必须做)

最基础的是收集:

  • JS Crash
  • Native Crash
  • App Freeze(卡死)
  • OOM
  • ANR类问题

HarmonyOS 可以使用:

  • HiAppEvent
  • AppGallery Connect Crash Service

系统能够自动记录崩溃事件并生成故障报告。

用户什么都不用做。

应用崩溃后:

用户闪退
↓
系统记录
↓
上传AGC
↓
开发者后台查看

第二层:业务日志上报(最重要)

实际上线上最难查的不是崩溃。

而是:

登录失败
上传失败
支付失败
蓝牙连接失败
VPN连接失败
文件下载失败

这些根本不会崩溃。

因此要自己封装日志系统。

例如:

Logger.info("登录开始")
Logger.info("请求Token成功")
Logger.error("上传文件失败", error)

保存到:

应用沙箱
/cache/logs

或者:

preferences
database

然后定期上传服务器。


第三层:用户反馈功能(推荐)

很多大厂都是这样干:

设置
→ 问题反馈

点击后:

问题描述
+
截图
+
当前日志
+
设备信息

一起上传。

例如:

设备型号
系统版本
APP版本
账号ID
最近500行日志

这样开发者收到反馈就能直接定位。


第四层:异常发生时自动上传

例如:

try {
  xxx()
} catch(err) {
  uploadErrorLog(err)
}

上传内容:

{
  "uid":"123456",
  "appVersion":"1.0.3",
  "device":"Mate70",
  "system":"HarmonyOS 6.1",
  "error":"上传图片失败",
  "stack":"..."
}

这样不用等用户反馈。


HarmonyOS 推荐做法

使用:

HiLog
+
HiAppEvent
+
自定义日志模块

HiAppEvent本身支持应用事件记录、故障事件记录以及系统故障订阅。

例如可以订阅:

APP_CRASH
APP_FREEZE
RESOURCE_OVERLIMIT

等故障事件。


用户反馈日志的最佳实践

很多团队最终采用下面的方案:

我的
→ 帮助与反馈
→ 提交问题

提交时自动附带:

✓ 最近1000条业务日志

✓ 当前页面信息

✓ 网络状态

✓ 设备型号

✓ 系统版本

✓ APP版本

✓ 崩溃堆栈(如果存在)

✓ 截图

上传到自己的服务器。

这样即使用户只说:

上传图片失败了

开发者后台也能看到:

14:22:11 选择图片
14:22:12 开始上传
14:22:13 OSS鉴权失败
14:22:13 token过期

基本就能直接定位问题。

对于企业级 HarmonyOS 应用(政务、金融、医疗、工业),通常都是:

AGC Crash Service
+
HiAppEvent
+
自建日志平台

三套同时使用,而不是只依赖用户截图或者手动导出日志。

开发者您好,鸿蒙都是自动收集日志的。

在AGC后台,开发与服务,APMS里有各种数据统计

还有应用需要支持应用日志抓取

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17,

登录AppGallery Connect,点击“开发与服务”,在项目列表中选择您的项目,并选择需要使用APMS服务的应用/元服务。如果您在“APMS > 异常管理”页面未看到应用崩溃数据,可能是因为您的存量应用或元服务尚未开通APMS服务权限。您可以在“APMS > 异常管理”页面顶部点击“异常管理”,然后在弹出框中点击“开通”,即可开通APMS服务。

开通成功后即可在AGC后管看到报错信息

纯血鸿蒙都是自动收集日志的。

在AGC后台,开发与服务,APMS里有各种数据统计哦~~~

cke_334.png

鸿蒙Next已上线应用日志收集:集成华为分析服务(HAS)SDK,使用HiLog记录事件并自动上报;崩溃日志通过AppGallery Connect崩溃服务捕获。如需自定义日志,使用HiLog写入本地文件,通过任务调度能力定时上传至自建服务器进行分析。

在HarmonyOS Next中,线上应用可通过系统提供的故障日志接口让用户主动反馈异常信息。核心是使用 faultLogger 模块获取近期崩溃、卡顿等故障日志,再将其写入文件由用户提交。示例简码如下:

import { faultLogger } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';

async function captureAndShareCrashLog() {
  try {
    // 查询最近一次JS_CRASH类型故障(也可选CPP_CRASH、APP_FREEZE等)
    let info = await faultLogger.query(faultLogger.FaultType.JS_CRASH);
    if (info && info.length > 0) {
      let logPath = getContext().cacheDir + '/crash_log.txt';
      let content = `Time: ${info[0].timestamp}\nReason: ${info[0].reason}\nStack: ${info[0].fullLog}`;
      let file = fileIo.openSync(logPath, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY);
      fileIo.writeSync(file.fd, content);
      fileIo.closeSync(file.fd);
      // 接下来可将logPath对应的文件通过分享、邮件或自定义上报接口发给开发者
    }
  } catch (err) {
    // 处理异常
  }
}

若不希望用户手动操作,可在应用启动时自动检测并上报未发送的故障日志。线上持续分析建议接入AGC崩溃服务,它会在发生崩溃时自动收集堆栈、设备信息等并上报,无需用户干预即可定位问题。

回到顶部