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  利用操作系
   479   480   481   482   483   484   485   486   487   488   489