背景介绍
之前在HarmonyOS Next适配mars过程中将xlog的的适配提交pr到mars官方仓库,中间有些伙伴私信需要编译好的xlog动态库,想着直接把动态库封装后开放出来下载更方便,所以开源了qlog源码(https://gitcode.com/wodekouwei/qlog)。开放源码后为了方便大家使用想着将产物上传到中心仓,本文记录发布中心仓的过程,希望对大家有所帮助。
qlog介绍
QLog是一款持久化日志的日志工具库。将代码中的打印到控制台的日志通知以异步方式加密压缩写入到文件内,方便开发者查看和分析。特别是针对线上问题,通过持久化日志可以更好的定位问题。
QLog基于微信mars中的xlog,微信的 XLog 日志库是微信团队为应对高并发、高性能及安全需求而设计的日志系统,主要用于微信客户端(Android/iOS)的日志记录。其核心特点如下: 微信的 XLog 日志库是微信团队为应对高并发、高性能及安全需求而设计的日志系统,主要用于微信客户端(Android/iOS)的日志记录。其核心特点如下:
加密与安全
- 日志加密:所有日志文件在存储和传输时均经过加密处理(如 AES 加密),防止敏感信息泄露,符合隐私保护要求。
- 防篡改:加密后的日志无法被直接修改,确保日志内容的完整性和可信度。
2. 高性能与低开销
- 异步写入:日志写入采用异步线程操作,避免阻塞主线程,保障应用流畅性。
- 内存映射(mmap):通过内存映射技术将日志直接写入文件,减少 I/O 次数,提升写入效率。
- 压缩优化:日志在存储或上传前进行压缩,减少磁盘占用和网络传输开销。
灵活的日志分级
- 支持多级别日志(如 VERBOSE、DEBUG、INFO、WARN、ERROR),开发者可按需过滤日志,便于问题定位。
- 可动态调整日志级别(如线上环境仅记录 ERROR 日志),平衡调试需求与性能消耗。
日志回捞机制
- 远程触发:通过服务器下发指令,客户端自动上传特定场景的日志,无需用户操作,方便线上问题排查。
- 条件过滤:支持按时间、用户 ID、日志级别等条件回捞,精准获取所需日志。
容错与稳定性
- 异常处理:在写入失败或设备空间不足时,自动降级或缓存日志,避免崩溃。
- 分块存储:日志按大小或时间分块存储,防止单个文件过大影响读写性能。
多平台支持
- 支持 Android 和 iOS 平台,提供统一的日志接口,降低多端维护成本。
按需日志控制
- 可关闭非关键日志的输出,减少生产环境的资源消耗。
- 支持动态开启/关闭特定模块的日志,便于针对性调试。
典型应用场景
- 线上问题追踪:通过加密日志回捞,快速定位用户反馈的崩溃或异常。
- 性能监控:结合异步写入和压缩,记录关键性能指标(如启动耗时)而不影响用户体验。
- 安全审计:加密日志为敏感操作提供可追溯且防篡改的记录。
XLog 在安全、性能、灵活性之间取得了平衡,尤其适合大规模移动应用的高效日志管理。其设计理念(如异步、加密、回捞)对需要兼顾用户体验和问题排查的开发者具有参考价值。 QLog将Xlog迁移到鸿蒙平台,同时拥有上面所有特性。
使用方式
依赖SD
ohpm i @qing/qlog
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
初始化QLogSDK
class LogDep implements LogDependency{
//是否debug模式,debug模式打印更多日志
isDebug(): boolean {
return true;
}
getFileLogLevel(): number {
//打印日志级别
return LogLevel.LEVEL_DEBUG;
}
}
LogSdk.init(this.context.getApplicationContext(), new LogDep());
打印日志
Logg.d('HelloWorldTAG', 'debug log...');
Logg.i('HelloWorldTAG', 'info log...');
Logg.w('HelloWorldTAG', 'warn log...');
Logg.e('HelloWorldTAG', 'error log...');
获取日志文件
日志文件写到应用沙盒中:
日志最多存储十天,超过十天日志会在应用启动时进行清理,可以通过调用Log.uploadLogFiles()将日志文件压缩并返回路径。
将导出的zip文件解压后,通过解密工具decod_mars.py解密即可查看日志内容。
发布流程
在库模块中(与src文件夹同一级目录下),添加如下文件:
- 新建README.md文件:在README.md文件中必须包含包的介绍和引用方式,还可以根据包的内容添加更详细介绍。
- 新建CHANGELOG.md文件:填写HAR的版本更新记录。
- 添加LICENSE文件:LICENSE许可文件。
- 重新编译库模块,生成*.har文件。
利用工具ssh-keygen生成公、私钥,可执行以下命令:
ssh-keygen -m PEM -t RSA -b 4096 -f ~/.ssh_ohpm/mykey
说明:
~/.ssh_ohpm/mykey
为私钥文件 mykey 的文件路径,按照实际情况指定。指定的私钥存储目录必须存在。- 追加了.pub后缀的相应公钥文件会存放在和私钥相同的目录下。
- OHPM包管理器只支持加密密钥认证,请在生成公私钥时输入密码。
- 登录OpenHarmony三方库中心仓(https://ohpm.openharmony.cn/#/cn/home)官网,单击主页右上角的个人中心, 新增OHPM公钥,将公钥文件(mykey.pub)的内容粘贴到公钥输入框中。
打开命令行工具,将对应私钥文件路径配置到 .ohpmrc 文件中 key_path 字段上,可执行以下命令进行配置:
ohpm config set key_path ~/.ssh_ohpm/mykey
登录OpenHarmony三方库中心仓(https://ohpm.openharmony.cn/)官网,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可执行如下命令:
ohpm config set publish_id your_publish_id
执行如下命令发布HAR,<HAR路径>需指定为.har文件的具体路径。
ohpm publish <HAR路径>
发布完成后,需要等待审核:
审核通过后可以在Package中看到上传的包信息:
常见问题
oh-package.json5配置问题
使用配置如下:
{
"name": "@qing/qlog",
"version": "1.0.0",
"description": "persistence log util for harmonyos next.",
"main": "Index.ets",
"author": "qingkouwei",
"license": "MIT",
"homepage": "https://gitcode.com/wodekouwei/qlog",
"repository": "https://gitcode.com/wodekouwei/qlog",
"dependencies": {
},
"compatibleSdkVersion": "12",
"compatibleSdkType": "HarmonyOS",
"obfuscated": false,
}
其中author、license、homepage、repository会体现在仓库详情页:
license字段和LICENSE文件中的许可协议要一致。
name名称可以带group命名空间,也可以不带,如果要带命名空间,则需要在OpenHarmony三方库中心仓个人中心组织管理中新增:
新增后需要等待审核,审核通过后才可以使用。
oh-package.json5配置信息要求参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
生成私钥必须要配置密码
下面生成公钥、私钥设置密码时必须设置,否则发布产物会失败:
sh-keygen -m PEM -t RSA -b 4096 -f ~/.ssh_ohpm/mykey
如何同一台电脑兼容私仓发布
ohpm config 会修改~/.ohpm/.ohpmrc
文件内容,如果已经配置私仓,再配置中心仓会覆盖该文件,可以通过发布时来配置中心仓信息:
ohpm publish --publish_registry https://ohpm.openharmony.cn/ohpm --publish_id xxx --key_path ~/.ssh_ohpm/mykey qloglib/build/default/outputs/default/qloglib.har
ohpm publish 发布命令参数配置参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
总结
这篇文章详细介绍了如何利用OHPM包管理器将HAR文件发布到OpenHarmony三方库中心仓的过程。通过生成私钥和公钥、配置中心仓参数以及应用发布码等步骤,用户可以顺利实现HAR文件的发布。需要注意的是,在生成公钥时必须设置密码以确保安全性,并在.ohpmrc中正确配置作者、许可证信息以符合实际需求。此外,发布完成后应仔细审核,避免因参数错误导致的上传失败。总体而言,这篇文章为开发者提供了清晰的操作指南和实用建议,帮助他们在OpenHarmony生态中更高效地管理三方库内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。