为什么需要 HiLog

写鸿蒙应用,console.log 只能应付最简单的场景。要查崩溃、追状态、看链路,HiLog 才是正主:它是系统级日志框架,带分级、带过滤、带领域隔离,日志量大也不怕。

日志不是写给机器看的,是写给未来两小时后的你。

HiLog 走的是 ArkTS 的 hilog 模块,可以按 domain 和 tag 归类,按级别过滤,在 DevEco Studio 的 Log 窗口里还能着色高亮。这套体系养成了,排查问题的时间能省一大半。

HiLog 基础:domain 与级别

每个日志都带 domain(业务域,十六进制)和 tag(模块名)。级别从 DEBUG 到 FATAL,越往后越严重。开发期多打 DEBUG 和 INFO,上线前清理掉噪音,只留 WARN 和 ERROR。

import { hilog } from '@kit.PerformanceAnalysisKit'

const DOMAIN = 0x0101
const TAG = 'ShopModule'

hilog.info(DOMAIN, TAG, '商品页加载,商品数=%{public}d', count)
hilog.error(DOMAIN, TAG, '请求失败,code=%{public}d, msg=%{public}s', code, msg)
日志级别速查
  • DEBUG调试期最细的信息。
  • INFO关键流程节点。
  • WARN有隐患但不致命。
  • ERROR / FATAL出错和崩溃。

domain 用一个应用内统一的编号,tag 用模块名,两者配合就能把日志按模块切开看。别把敏感数据打进去,用户信息要脱敏。

格式化与参数

HiLog 支持带格式的占位符:%{public}s、%{public}d、%{public}f 等。花括号里的 public 表示这条参数可以明文显示,private 则会自动打码,防止隐私泄露。

hilog.info(DOMAIN, TAG, '用户 %{public}s 登录成功,耗时 %{public}d ms',
  user.name, costMs)
鸿蒙调试:发光放大镜放大一块半透明日志面板、面板上彩色分级圆点与连接线的蓝调插画
放大镜对准日志面板,逐条排查。

占位符别和字符串拼接混用:拼接会创建新对象、还要做转义,性能差;占位符是格式化输出,快得多。日志量大时这个差异会被放大。

另外,%{private} 会把参数自动打码为 ,适合记录用户 ID、手机号这类敏感字段;如果确实需要排查时看清,再按团队规范改用 %{public},并在日志规范里登记。日志里永远不要出现明文密码、令牌和支付信息,哪怕只是开发阶段。一个好习惯是给每条日志配一个简短的关键词前缀,例如商品模块统一用 Shop 开头,这样后续用 tag 过滤时,同类日志会整齐地聚在一起,扫一眼就能抓住异常的那一条。

还有一点容易被忽略:日志的打印本身也有成本,高频打点(例如每次滚动、每帧渲染)会在发布版里拖慢性能。上线前把 DEBUG 和 INFO 的噪音清掉,保留 WARN 以上,再用开关按需打开详细日志,排查线上问题时就能既保性能、又留后路。

过滤器与设备查看

DevEco Studio 的 Log 窗口支持按 level、tag、关键字过滤。命令行也能用 hdc 抓日志,再配合 grep 看关键行。

hdc shell hilog -T ShopModule -e error
hdc shell hilog -t "ShopModule" -D 0x0101

真机上日志默认有缓冲区上限,量大时可能被冲掉。紧要日志记到文件里,或者提高级别过滤,避免日志把性能拖垮。