HarmonyOS Next 日志工具介绍
在HarmonyOS Next开发中,日志是我们调试定位问题的主要手段,不管是hilog还是console,最终都可以输出到DevEco Studio的日志模块中:
在这里可以过滤应用进程、日志级别、日志内容呢,也可以便捷的搜索。但是在一些场景,日志较多,刷新较快时,我们希望日志可以输出到文件,在Android中提供了logcat命令工具帮助我们将日志输出到控制台或者文件,HarmonyOS Next也提供了类似的工具hilog。
hilog工具介绍
HiLog日志系统,提供给系统框架、服务、以及应用,用于打印日志,记录用户操作、系统运行状态等。开发者可以通过hilog命令行查询相关日志信息。
当我们安装DevEco Studio IDE或者安装HarmonyOS SDK后,将hdc命令工具配置到环境变量后就可以直接使用hdc命令进入手机的shell中:
hdc shell
进入shell后就可以开始执行hilog命令了:
我们发现日志刷的特别快,还不如DevEco Studio中的日志工具,怎么办?给hilog加参数。
hilog命令参数说明:
短选项 | 长选项 | 参数 | 说明 |
---|---|---|---|
-h | –help | 帮助命令。 | |
缺省 | 缺省 | 阻塞读日志,不退出。 | |
-x | –exit | 非阻塞读日志,读完退出。 | |
-g | 查询buffer的大小,配合-t指定某一类型使用,默认app和core。 | ||
-G | –buffer-size | 设置指定日志类型缓冲区的大小,配合-t指定某一类型使用,默认app和core, 可使用B/K/M为单位,范围为64K-16M。 | |
-r | 清除buffer日志,配合-t指定某一类型使用,默认app和core。 | ||
-k | <on/off> | Kernel日志读取开关控制。 | |
on | 打开读取kernel日志。 | ||
off | 关闭读取kernel日志。 | ||
-s | –statistics | 查询统计信息,需配合-t或-D使用。 | |
-S | 清除统计信息,需配合-t或-D使用。 | ||
-Q | 流控缺省配额开关控制。 | ||
pidon | 进程流控开关打开。 | ||
pidoff | 进程流控开关关闭。 | ||
domainon | domain流控开关打开。 | ||
domainoff | domain流控开关关闭。 | ||
-L | –level | 指定级别的日志,示例:-L D/I/W/E/F。 | |
-t | –type | 指定类型的日志,示例:-t app/core/init/only_prerelease。app为应用日志,core为系统日志,init为启动日志,only_prerelease为仅在系统release版本前打印的日志,应用开发者无需关注。 | |
-D | –domain | 指定domain。 | |
-T | –tag | 指定tag。 | |
-a | –head | 只显示前行日志。 | |
-z | –tail | 只显示后行日志。 | |
-P | –pid | 标识不同的pid。 | |
-e | –regex | 只打印日志消息与匹配的行,其中是一个正则表达式。 | |
-f | –filename | 设置落盘的文件名。 | |
-l | –length | 设置落盘的文件大小,需要大于等于64K。 | |
-n | –number | 设置落盘文件的个数。 | |
-j | –jobid | 设置落盘任务的ID。 | |
-w | –write | 落盘任务控制。 | |
query | 落盘任务查询。 | ||
start | 落盘任务开始,命令行参数为文件名、单文件大小、落盘算法、rotate文件数目。 | ||
stop | 落盘任务停止。 | ||
refresh | 刷新缓冲区的日志到落盘文件。 | ||
clear | 删除已经落盘的日志文件。 | ||
-m | –stream | 落盘方式控制。 | |
none | 无压缩方式落盘。 | ||
zlib | zlib压缩算法落盘,落盘文件为.gz。 | ||
zstd | zstd压缩算法落盘,落盘文件为.zst。 | ||
-v | –format | ||
time | 显示本地时间。 | ||
color | 显示不同级别显示不同颜色,参数缺省级别颜色模式处理(按黑白方式)。 | ||
epoch | 显示相对1970时间。 | ||
monotonic | 显示相对启动时间。 | ||
usec | 显示微秒精度时间。 | ||
nsec | 显示纳秒精度时间。 | ||
year | 显示将年份添加到显示的时间。 | ||
zone | 显示将本地时区添加到显示的时间。 | ||
wrap | 日志换行显示时,新行不增加时间戳等前缀。 | ||
-b | –baselevel | 设置可打印日志的最低等级:D(DEBUG)/I(INFO)/W(WARN)/E(ERROR)/F(FATAL)。 |
参数配置实践
清除缓冲区日志
一般日志都有缓存区,我们在开始启动应用准备观察日志时为了屏蔽之前的日志缓存干扰,可以执行清除缓存命令:
$ hilog -r
Log type core,app,only_prerelease buffer clear successfully
内核日志读取开关控制
在应用调试时一般不需要内核日志,可以通过hilog -k on/off
开启或关闭内核日志:
$ hilog -k on
Set hilogd storing kmsg log on successfully
$
$ hilog -k off
Set hilogd storing kmsg log off successfully
查看指定级别日志
hilog -L D/I/W/E/F
查看指定类型日志
hilog -t app
查看指定domain日志
hilog -D 01B06
查看指定TAG日志
hilog -T tag
查看指定进程日志
hilog -P pid
查看符合正则匹配关键字的日志
hilog -e start
查看、设置落盘任务
hilog -w control
- 查询当前任务: hilog -w query
- 开启hilog落盘任务,并且设置落盘文件数量为1000个: hilog -w start -n 1000
- 开启kmsglog落盘任务,并且设置落盘文件数量为100个: hilog -w start -n 100 -t kmsg
- 停止当前落盘任务: hilog -w stop
- 开启kmsglog落盘任务,并且设置落盘规则,其中压缩方式可以为zlib,zstd,none。以设置规则为例:文件名为kmsglog,大小为2M,数量为100个, 其压缩方式为zlib压缩,命令行为: hilog -w start -t kmsg -f kmsglog -l 2M -n 100 -m zlib
示例:
$ hilog -w query
Persist task query failed
No running persistent task [CODE: -63]
$
$ hilog -w start -n 1000
Persist task [jobid:1][fileNum:1000][fileSize:4194304] start successfully
$
$ hilog -w start -n 100 -t kmsg
Persist task [jobid:2][fileNum:100][fileSize:4194304] start successfully
$
$ hilog -w stop
Persist task [jobid:1] stop successfully
Persist task [jobid:2] stop successfully
$
$ hilog -w start -t kmsg -f kmsglog -l 2M -n 100 -m zlib
Persist task [jobid:2][fileNum:100][fileSize:2097152] start successfully
设置日志显示格式
hilog -v time/color/epoch/monotonic/usec/nsec/year/zone/wrap
这个格式设置对于我们控制台查看日志还是很方便的。
设置可打印日志的最低等级
hilog -b D/I/W/E/F
有时候明明打印了日志,但是看不到,可能就是因为设置了这个。
hilogtool工具介绍
目前hilog日志为编码后二进制形式保存的gz格式文件,开发者从设备/data/log/hilog路径下导出后无法直接解压查看,需要使用hilogtool工具进行解析,将转换为明文hilog日志。
hilogtool工具位于SDK的hms/toolchains目录下,使用方法如下:
hilogtool parse -i xxx -o xxx -d xxx
hilogtool parse –-input xxx –-output xxx --dict xxx
解析命令参数列表:
选项 | 描述 | 举例 |
---|---|---|
-i/–-input inputDir | 用于指定输入路径,会扫描该目录下所有的hilog流水日志文件并进行解析; 缺省时,为命令行当前所在路径; | 解析指定目录(D:\temp\hilog)下的所有hilog文件: hilogtool parse -i D:\temp\hilog 解析当前目录下的所有hilog文件: hilogtool parse -i .| |
-i/–-input inputFile | 解析指定的单个hilog文件 | 解析指定的hilog文件: hilogtool parse -i D:\temp\data\log\hilog.706.20230711-071816.gz hilogtool parse -i .\hilog.706.20230711-071816.gz |
-o/–-output outputDir | 用于指定输出路径,即解析后的日志文件保存路径; 缺省时,为解析的hilog原日志文件所在路径; | 解析当前目录下的日志文件到D:\temp目录: hilogtool parse -i .\ -o D:\temp |
-d/–dict dictFile | 用于指定数据字典的路径; 缺省时,会在命令行当前所在路径下匹配最新的数据字典文件(格式:hilog_dict.20230908-142200.zip) | 解析指定目录(D:\temp\hilog)下的所有hilog文件,并且指定使用该目录下的数据字典: hilogtool parse -i D:\temp\hilog -d D:\temp\hilog\hilog_dict.20230908-142200.zip |
数据字典文件在data/log/hilog目录下,格式为:hilog_dict.2024xxxx-xxxxxx.zip,是设备启动时自动生成的,在解析日志时需要这个文件。
若缺少数据字典,会导致部分日志解析失败;重启设备可以重新生成该数据字典。
参考链接
- hilog
- hilogtool
总结
使用 hilog 和 hilogtool 可以帮助开发者更好地理解和调试应用程序,尤其是在遇到问题时,它们提供了一个查看过去事件和错误的方式。然而,由于这些工具和系统是特定于 Huawei 的 HarmonyOS 平台,因此可能不适用于其他操作系统或平台。
如果你正在使用 HarmonyOS 开发应用程序,并且需要记录和分析日志信息,了解 hilog 和 hilogtool 将非常有帮助。如果你在其他平台上工作,你可能需要寻找类似的工具和方法来管理你的日志。