鸿蒙中 错误日志和崩溃日志上报

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

鸿蒙(HarmonyOS)中,系统提供了完整的错误日志和崩溃日志上报机制,包含现成的API和工具类支持。具体实现,如下:

一系统原生API支持

  1. 错误管理(errorManager)
    • 功能:捕获应用未处理的异常(如JS Crash),支持自定义错误回调。
    • 核心API
     import errorManager from '@ohos.app.ability.errorManager';
     
     // 注册错误监听
     const observerId = errorManager.on('error', {
       onUnhandledException: (errMsg) => {
         console.error('崩溃信息:', errMsg);
         // 上报逻辑
       }
     });
     
     // 注销监听
     errorManager.off('error', observerId);
  • 特点
    • 可防止应用闪退,捕获异常后仍可执行上报逻辑 。

    2. 故障日志(faultLogger)

  1. 功能:记录Native崩溃日志(如C++层错误),支持异步查询。
  2. 使用示例
     import faultLogger from '@ohos.faultLogger';
     
     // 查询崩溃日志
     const logs = faultLogger.query(faultLogger.FaultType.JS_CRASH);
     logs.forEach(log => {
       console.log('崩溃堆栈:', log.log);
       // 上报到服务器
     });
  • 适用场景
    • 适用于Native层崩溃分析,需下次启动时查询 。

二、日志采集与分析工具

  1. HiLog日志系统
    • 功能:分类记录调试日志(DEBUG/INFO/ERROR等),支持按模块过滤。
    • 示例代码
     import hilog from '@ohos.hilog';
     
     const TAG = 'MyApp';
     hilog.error(0x0000, TAG, '错误日志: %{public}s', '网络请求超时');
  • 优势
    • 支持日志级别控制,敏感数据可通过%{public}s脱敏 。

   2. 可视化工具

  1. LTS Viewer:分析时间轴日志,定位性能瓶颈。
  2. HiTrace:追踪分布式调用链,适用于复杂交互场景 。

三、完整上报方案实现

1. 全局异常捕获工具类(推荐)
import errorManager from '@ohos.app.ability.errorManager';
import { BusinessError } from '@kit.BasicServicesKit';
import { FileUtil } from './FileUtil'; // 自定义文件工具

export class CrashReporter {
  private static observerId: number | undefined;

  static init() {
    if (this.observerId === undefined) {
      this.observerId = errorManager.on('error', {
        onUnhandledException: (errMsg) => {
          const log = `${new Date().toISOString()}\n${errMsg}\n`;
          FileUtil.writeLog(log); // 写入本地
          this.uploadToServer(log); // 上报服务器
        }
      });
    }
  }

  private static uploadToServer(log: string) {
    // 使用HTTP或RPC接口上报
  }
}

// 在Ability中初始化
CrashReporter.init();

功能

  • 自动捕获异常并持久化日志
  • 支持断网时缓存日志,联网后重传 
2. 崩溃分析服务集成
import faultLogger from '@ohos.faultLogger';
import http from '@ohos.net.http';

// 上报Native崩溃
const logs = faultLogger.query(faultLogger.FaultType.CPP_CRASH);
logs.forEach(log => {
  http.request({
    url: 'https://api.example.com/crash',
    method: 'POST',
    data: JSON.stringify(log)
  });
});

注意:需声明ohos.permission.READ_CRASH_LOG权限。

四、权限与配置

  1. 必备权限声明 在module.json5中添加:
   {
     "requestPermissions": [
       {
         "name": "ohos.permission.READ_CRASH_LOG",
         "reason": "用于崩溃分析"
       },
       {
         "name": "ohos.permission.INTERNET",
         "reason": "上报日志到服务器"
       }
     ]
   }

   2. 安全建议

  • 敏感日志脱敏处理(如用户ID)
  • 使用HTTPS加密传输 
     

你可能感兴趣的:(鸿蒙,harmonyos,华为,鸿蒙,日志上报)