qlog:基于微信XLog的鸿蒙平台持久化日志工具库

HarmonyOS Next持久化日志库

分支1Tags0
文件最后提交记录最后更新时间
1 年前
7 个月前
1 年前
1 年前
7 个月前
1 年前
1 年前
7 个月前
1 年前
1 年前
1 年前
1 年前

QLog介绍

QLog是一款持久化日志的日志工具库。将代码中的打印到控制台的日志通知以异步方式加密压缩写入到文件内,方便开发者查看和分析。特别是针对线上问题,通过持久化日志可以更好的定位问题。

QLog基于微信mars中的xlog,微信的 XLog 日志库是微信团队为应对高并发、高性能及安全需求而设计的日志系统,主要用于微信客户端(Android/iOS)的日志记录。其核心特点如下: 微信的 XLog 日志库是微信团队为应对高并发、高性能及安全需求而设计的日志系统,主要用于微信客户端(Android/iOS)的日志记录。其核心特点如下:

1. 加密与安全

  • 日志加密:所有日志文件在存储和传输时均经过加密处理(如 AES 加密),防止敏感信息泄露,符合隐私保护要求。
  • 防篡改:加密后的日志无法被直接修改,确保日志内容的完整性和可信度。

2. 高性能与低开销

  • 异步写入:日志写入采用异步线程操作,避免阻塞主线程,保障应用流畅性。
  • 内存映射(mmap):通过内存映射技术将日志直接写入文件,减少 I/O 次数,提升写入效率。
  • 压缩优化:日志在存储或上传前进行压缩,减少磁盘占用和网络传输开销。

3. 灵活的日志分级

  • 支持多级别日志(如 VERBOSE、DEBUG、INFO、WARN、ERROR),开发者可按需过滤日志,便于问题定位。
  • 可动态调整日志级别(如线上环境仅记录 ERROR 日志),平衡调试需求与性能消耗。

4. 日志回捞机制

  • 远程触发:通过服务器下发指令,客户端自动上传特定场景的日志,无需用户操作,方便线上问题排查。
  • 条件过滤:支持按时间、用户 ID、日志级别等条件回捞,精准获取所需日志。

5. 容错与稳定性

  • 异常处理:在写入失败或设备空间不足时,自动降级或缓存日志,避免崩溃。
  • 分块存储:日志按大小或时间分块存储,防止单个文件过大影响读写性能。

6. 多平台支持

  • 支持 Android 和 iOS 平台,提供统一的日志接口,降低多端维护成本。

7. 按需日志控制

  • 可关闭非关键日志的输出,减少生产环境的资源消耗。
  • 支持动态开启/关闭特定模块的日志,便于针对性调试。

典型应用场景

  • 线上问题追踪:通过加密日志回捞,快速定位用户反馈的崩溃或异常。
  • 性能监控:结合异步写入和压缩,记录关键性能指标(如启动耗时)而不影响用户体验。
  • 安全审计:加密日志为敏感操作提供可追溯且防篡改的记录。

XLog 在安全、性能、灵活性之间取得了平衡,尤其适合大规模移动应用的高效日志管理。其设计理念(如异步、加密、回捞)对需要兼顾用户体验和问题排查的开发者具有参考价值。 QLog将Xlog迁移到鸿蒙平台,同时拥有上面所有特性。

使用方式

依赖SDK

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解密即可查看日志内容。

项目介绍

HarmonyOS Next持久化日志库

定制我的领域