Page 484 - 《软件学报》2024年第4期
P. 484
2062 软件学报 2024 年第 35 卷第 4 期
3.3 架构与模块设计
以上为 HiLog 日志系统的日志数据结构定义和功能定义, 下文将依据 HiLog 日志系统的模型规范, 给出
HiLog 日志系统的架构与模块设计, 并对其中重要的模块给出解析和说明.
3.3.1 HiLog 日志系统体系结构
HiLog 日志系统的架构设计如图 4 所示, 主要包括 libhilog、hilogtool 和 hilogd 这 3 个模块, 其中, 由蓝色和红
色的箭头分别代表标准和轻量 HiLog 的日志流动方向. 开发者通过 libhilog 进行日志写入, hilogtool 进行日志输
出. HiLog 对于计算资源充沛的系统实现了标准 HiLog, 通过维护守护进程 hilogd 实现高性能的日志缓冲区管理;
而对于计算资源受限的轻量、小型系统设计了轻量 HiLog, 直接将日志写入内核的缓冲区中. 现将每个模块描述
如下.
HiLog
libhilog hilogd hilogtool
编写并运行 数据保护 业务流控
程序 日志打印 阅读日志
开发者 开发者
日志生成
用户态缓冲区
进程流控 日志持久化
内核缓冲区
图 4 HiLog 日志系统整体架构
(1) libhilog 模块提供写日志能力, 一方面提供静态写日志接口, 另一方面负责运行时日志生成. 在附加功能方
面, libhilog 创新性地提供写日志接口的敏感数据标识, 实现数据安全; 同时 libhilog 还提供基于进程的日志流控机
制, 实现对所有进程日志写入资源的合理分配. 对于 L2–L5 级别的平台, 日志经过添加敏感数据标识和流控后, 被
发送至 hilogd 模块; 对于 L1 平台, 日志经过添加敏感数据标识和流控后, 将日志直接写入内核缓冲区. libhilog 生
成各类型日志的原理: 在开发时, 需要 HiLog 的使用者在开发程序时引入 libhilog 的头文件, 调用 HiLog 的写日志
接口. 在编译构建时, 将开发的程序模块链接到 libhilog 的动态链接库. 在程序运行时, 对应进程会加载动态链接
库. 当程序运行至写日志接口时, 会调用动态链接库中的写日志方法, 生成日志.
(2) hilogtool 模块提供读日志能力, 一方面提供与操作系统 Shell 交互的能力, 另一方面负责执行读日志任务.
开发者通过 Shell 命令控制日志打印或日志持久化任务. 对于 L2–L5 级别的平台, hilogtool 从 hilogd 读取日志; 对
于 L1 平台, hilogtool 从内核缓冲区读取日志.
(3) hilogd 模块是面向 L2–L5 平台设计的高性能日志缓冲区 (hilog_buffer) 及其管理模块. 提供日志监听、排
序和存储的功能, 其运行时具备系统守护进程的特性. hilogd 与系统的其他模块是解耦的, 在面向 L1 级别的
OpenHarmony 平台时, 可以不加载 hilogd 模块, 以达到节省系统资源的目标, 增强 HiLog 对资源受限设备的兼
容性.
图 4 中的内核缓冲区在不同 OpenHarmony 系统中拥有不同的意义. 在标准 OpenHarmony 系统中内核缓冲区
是指 Linux 的内核日志缓冲区, hilogd 将会读取其中的日志信息到 hilog_buffer, 保证 hilog_buffer 中拥有系统的全
量日志信息. 在轻量、小型 OpenHarmony 系统中内核缓冲区是指 LiteOS 内核的内核日志缓冲区, 负责暂存全量
的日志信息.
在编译构建时, 可以通过自定义选择构建标准 HiLog 或轻量 HiLog, 目的在于实现良好的设备兼容性. 标准
HiLog 在用户态维护高性能的日志缓冲区 (hilog_buffer), 适用日志流量较大的场景, 对于设备的内存需求较高, 其
硬件约束条件为 OpenHarmony 硬件标准的 L2 及以上设备 (即内存大于 128 MB 的设备). 轻量 HiLog 利用操作系