4. hilog 命令行工具:命令行过滤与日志导出
聊完了代码里怎么打日志,咱们得说说怎么在命令行里把这些日志捞出来看。说实话,我见过不少开发者,代码里打了一堆日志,结果到了调试阶段,对着终端里刷屏的信息一脸懵——这其实就是没用好 hilog 的过滤功能。
hilog 命令行工具,说白了就是鸿蒙系统给咱们准备的一把「手术刀」。它能帮你精准切出想要的那部分日志,而不是让你在茫茫信息海里捞针。我个人习惯是,只要开始调试,终端里一定开着 hilog,随时准备抓现场。
4.1 基础过滤:-T 标签与 -L 级别
先说说最常用的两个参数:-T 和 -L。这两个组合起来用,基本能覆盖 90% 的日常调试场景。
-T 标签过滤
标签(Tag)是日志的第一道筛子。比如你只关心网络模块的日志,那就指定它的标签:
hilog -T NetManager
这样终端里就只会显示标签为 NetManager 的日志。我在项目里调试蓝牙模块时,经常同时开好几个标签:
hilog -T BtHost -T BtController
嗯,这里要注意:多个 -T 参数是「或」的关系,只要匹配其中一个就会显示。
-L 级别过滤
级别过滤就更直观了。你想想看,线上环境日志量巨大,你不可能把 DEBUG 级别的日志都开着。这时候用 -L 指定最低级别:
hilog -L WARN
这条命令只显示 WARN、ERROR、FATAL 级别的日志。我一般调试阶段用 -L DEBUG,发布后用 -L INFO 或 -L WARN。
hilog -T NetManager -L ERROR。这样信息量刚刚好,不会漏掉关键错误,也不会被无关信息干扰。
4.2 实时查看:像 tail -f 一样跟踪日志
hilog 默认就是实时输出的,这点和 Linux 的 tail -f 很像。你运行命令后,终端会一直等待新的日志产生并打印出来。
但实时查看有个痛点——日志刷太快,根本来不及看。我遇到过这种情况:某个模块启动时疯狂打日志,一秒几百条,关键信息瞬间就被冲走了。
这时候我一般会配合 grep 做二次过滤:
hilog -T MyModule | grep "关键字段"
或者用 head 限制输出行数:
hilog -T MyModule | head -50
这样只取前 50 条,看完再继续。说白了,实时查看的精髓不在于「看」,而在于「抓」——抓住那一瞬间的关键信息。
4.3 日志导出:把现场保存下来
实时查看适合快速定位问题,但有些 bug 需要反复分析,或者需要把日志发给同事看。这时候就需要导出功能了。
导出到文件
最简单的导出方式就是重定向:
hilog -T MyModule -L DEBUG > my_log.txt
这样所有匹配的日志都会写入 my_log.txt 文件。我习惯在文件名里加上时间戳,方便后续查找:
hilog -T MyModule > "log_$(date +%Y%m%d_%H%M%S).txt"
指定输出格式
hilog 支持多种输出格式,我个人比较喜欢用 --format 参数控制:
hilog -T MyModule --format time,level,tag,message
这样输出的日志包含时间、级别、标签和消息内容,信息完整又不冗余。如果你需要解析日志,建议用 CSV 格式:
hilog -T MyModule --format csv > log.csv
这样可以直接用 Excel 或 Python 脚本分析,非常方便。
--buffer-size 参数:hilog -T MyModule --buffer-size 8192 > log.txt。缓冲区设大一点,能有效避免丢日志。
4.4 实用组合拳:几个我常用的场景
光讲参数没意思,我分享几个实际调试中常用的组合命令,你直接拿去用就行。
| 场景 | 命令 | 说明 |
|---|---|---|
| 快速定位崩溃 | hilog -L FATAL -T * |
只看 FATAL 级别,所有标签 |
| 跟踪模块启动 | hilog -T MyModule -L DEBUG | head -200 |
取前 200 条,看启动流程 |
| 导出错误日志 | hilog -L WARN --format csv > errors.csv |
导出 WARN 及以上级别,CSV 格式 |
| 实时监控性能 | hilog -T Performance -L INFO |
只关注性能模块的 INFO 及以上日志 |
| 多标签联合过滤 | hilog -T BtHost -T BtController -L DEBUG |
同时看蓝牙两个模块的调试日志 |
你看,这些命令都不复杂,但组合起来能解决大部分调试场景。我刚开始用 hilog 时也记不住这么多参数,后来把常用的几条存成了 shell 脚本,用的时候直接执行,省心不少。
4.5 进阶技巧:日志轮转与持久化
最后聊一个进阶话题——日志轮转。如果你的设备需要长时间运行,日志文件会越来越大。我遇到过一台设备跑了三天,日志文件撑到了 2GB,打开都费劲。
hilog 支持日志轮转,通过 --rotate 参数控制:
hilog -T MyModule --rotate --max-size 10M --max-files 5
这条命令的意思是:每个日志文件最大 10MB,最多保留 5 个文件,超过就自动轮转。这样既不会丢日志,也不会撑爆磁盘。
嗯,这里要提醒一下:日志轮转在嵌入式设备上特别重要。那些设备存储空间本来就小,一个不小心日志就把 flash 写满了,系统直接挂掉。我吃过这个亏,所以现在只要做长时间测试,一定会开轮转。
好了,这一章的内容就这些。hilog 命令行工具其实还有很多参数,但上面这些已经能覆盖你 95% 的日常需求了。下一章咱们聊聊更高级的用法——如何用 hilog 做性能分析和问题定位。到时候我会分享一些我在实际项目中遇到的坑,保证让你少走弯路。