本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
鸿蒙(HarmonyOS)中,系统提供了完整的错误日志和崩溃日志上报机制,包含现成的API和工具类支持。具体实现,如下:
一系统原生API支持
- 错误管理(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)
- 功能:记录Native崩溃日志(如C++层错误),支持异步查询。
- 使用示例:
import faultLogger from '@ohos.faultLogger';
// 查询崩溃日志
const logs = faultLogger.query(faultLogger.FaultType.JS_CRASH);
logs.forEach(log => {
console.log('崩溃堆栈:', log.log);
// 上报到服务器
});
- 适用场景:
- 适用于Native层崩溃分析,需下次启动时查询 。
二、日志采集与分析工具
- HiLog日志系统
- 功能:分类记录调试日志(DEBUG/INFO/ERROR等),支持按模块过滤。
- 示例代码:
import hilog from '@ohos.hilog';
const TAG = 'MyApp';
hilog.error(0x0000, TAG, '错误日志: %{public}s', '网络请求超时');
- 优势:
- 支持日志级别控制,敏感数据可通过
%{public}s
脱敏 。
- 支持日志级别控制,敏感数据可通过
2. 可视化工具
- LTS Viewer:分析时间轴日志,定位性能瓶颈。
- 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
权限。
四、权限与配置
- 必备权限声明 在
module.json5
中添加:
{
"requestPermissions": [
{
"name": "ohos.permission.READ_CRASH_LOG",
"reason": "用于崩溃分析"
},
{
"name": "ohos.permission.INTERNET",
"reason": "上报日志到服务器"
}
]
}
2. 安全建议
- 敏感日志脱敏处理(如用户ID)
- 使用HTTPS加密传输