OpenHarmony的DFX子系统提供了一个功能非常强大的组件集合, 可方便开发者针对性地跟踪程序流程,排查异常和解决实际问题。本文简单介绍一下有关日志的打印功能,因为几乎所有的子系统、组件都不可避免地要用到它。善用日志,可非常有效地帮助我们理解OpenHarmony 各个模块的工作流程和相关细节。

DFX简介

在OpenHarmony中,DFX(Design for X)是为了提升质量属性软件设计,目前包含的内容主要有:DFR(Design for Reliability,可靠性)和DFT(Design for Testability,可测试性)特性。

提供以下功能:

  • HiLog流水日志。

  • HiView插件平台。

  • FaultLoggerd应用故障收集和订阅。

  • HiAppEvent应用事件记录接口及框架。

  • HiSysEvent系统事件记录接口及服务。

HiLog架构图:

HiLog架构图

在OpenHarmony源码中,以轻量系统为例,我们可以找到// vendor/ hisilicon/ hispark _ pegasus/ config. json和// build/ lite/ components/ hiviewdfx. json这两个文件。config. json是子系统hiviewdfx的配置文件,包含hilog_lite、hievent_lite、blackbox、hidumper_mini等组件,在hiviewdfx.json文件也有这几类子组件的配置,部署路径均在‘//base/hiviewdfx/‘下,如下所示。

base/hiviewdfx     # DFX主仓,用于存放编译相关配置
├── hiview         # hiview部件,包含插件平台和事件分发能力
├── hiview_lite    # hiview_lite部件,包含轻量系统的日志任务能力
├── hilog          # hilog部件,包含标准系统的流水日志能力
├── hilog_lite     # hilog_lite部件,包含轻量和小型系统的流水日志能力
├── hievent_lite   # hievent_lite部件,包含轻量系统的事件日志能力
├── hiappevent     # hiappevent部件,包含应用事件记录接口及框架
├── hisysevent     # hisysevent部件,包含系统事件记录接口及服务
├── faultloggerd   # faultloggerd部件,包含应用故障日志采集服务

hilog 框架主要实现了日志的打印、输出和流控功能,目录如下。
/base/hiviewdfx/hilog
├── frameworks           # 框架代码
│   └── native           # HiLog native实现代码
├── interfaces           # 接口
│   └── native           # 对外C/C++接口
│       └── innerkits    # 对内部子系统暴露的头文件
│       └── kits         # 对应用暴露的头文件
│   └── js               # 对外js接口
├── services
│   └── hilogd           # 日志常驻服务实现
│   └── hilogtool        # 日志工具实现

做应用开发中常用到的Hilog调用,则主要是interfaces/native/ kits/hilog目录下的hiview_log.h文件中做的封装,通过实现宏HILOG_XXX定义,这是日志框架对外提供的接口,最终由APP调用。

hilog有比较丰富的命令行配置,以下简单举例。

设置日志级别命令:
hilog -b W \设置全局日志级别为Warn级别。
hilog -b D -T testTag \设置日志Tag为"testTag"的日志级别为Debug级别。
hilog -b D -D 0x3200 \设置日志domainID为0x3200的日志级别为Debug级别。

示例:hilog -G 4M                                                                
解释:设置hilogd buffer大小为4M。                                                                                          
示例:hilog -g                                                                   
解释:查询hilogd buffer大小。                                                                                             
示例:hilog -w start -n 100                                  
解释:执行名字为hilog的落盘任务,不指定-n 参数默认落盘10个文件。
示例:hilog -b I
解释:将全局日志级别设置为I级别                                  
type、level、domain、tag支持排除查询,排除查询可以使用以"^"开头的参数和分隔符","."来完成   
示例:hilog -t ^core,app 排除core和app类型的日志,可以与其他参数一起使用。
示例:hilog -t app core 打印core和app类型的日志,可以与其他参数一起使用。                                         

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐