前言日志系统是应用开发中不可或缺的调试工具它帮助开发者追踪代码执行流程、定位异常原因、分析性能瓶颈。在萌宠日记中我们使用 HarmonyOS 内置的hilog日志系统在 Ability 生命周期、页面加载、异常处理等关键节点记录了详细的日志信息。本文将从萌宠日记的 hilog 使用实践出发深入解析 HarmonyOS 日志系统的完整使用方法包括日志级别、隐私保护、日志查看、调试技巧等内容。一、hilog 日志系统概述1.1 什么是 hiloghilog是 HarmonyOS 的日志系统提供以下核心能力能力说明分级输出支持 DEBUG、INFO、WARN、ERROR、FATAL 五级日志隐私保护区分公开和私有数据自动过滤敏感信息按域过滤通过 DOMAIN 和 TAG 灵活筛选日志性能优化异步输出对应用性能影响小1.2 萌宠日记的日志配置// EntryAbility.ets — 日志系统初始化 import { hilog } from kit.PerformanceAnalysisKit; const DOMAIN 0x0000; // 日志域0x0000 为应用域 export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { try { this.context.getApplicationContext() .setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); } catch (err) { // 错误日志示例 hilog.error(DOMAIN, testTag, Failed to set colorMode. Cause: %{public}s, JSON.stringify(err)); } // 信息日志示例 hilog.info(DOMAIN, testTag, %{public}s, Ability onCreate); } }提示DOMAIN取值范围为0x0000到0xFFFF其中0x0000保留给应用使用。0x0001及以上为系统服务使用。二、日志级别详解2.1 五级日志体系import { hilog } from kit.PerformanceAnalysisKit; const DOMAIN 0x0000; // DEBUG 级别 — 调试信息仅在 DEBUG 版本输出 hilog.debug(DOMAIN, testTag, Debug message: %{public}s, debug info); // INFO 级别 — 正常流程信息 hilog.info(DOMAIN, testTag, Info message: %{public}s, normal flow); // WARN 级别 — 警告信息不影响正常运行 hilog.warn(DOMAIN, testTag, Warning message: %{public}s, potential issue); // ERROR 级别 — 错误信息影响功能但应用不崩溃 hilog.error(DOMAIN, testTag, Error message: %{public}s, operation failed); // FATAL 级别 — 致命错误应用即将崩溃 hilog.fatal(DOMAIN, testTag, Fatal message: %{public}s, fatal error);2.2 日志级别选择指南级别使用场景萌宠日记示例是否在 Release 版本输出DEBUG开发调试细节页面渲染完成、数据加载详情❌ 仅 Debug 版本INFO正常流程关键节点Ability 生命周期事件✅WARN潜在问题但不影响功能数据加载超时、降级策略✅ERROR功能异常但不崩溃颜色模式设置失败✅FATAL致命错误应用配置缺失✅三、DOMAIN 与 TAG 管理3.1 DOMAIN 域// 定义日志域常量 const DOMAIN_APP 0x0000; // 应用主域 const DOMAIN_NETWORK 0x0001; // 网络模块示例 const DOMAIN_DATABASE 0x0002; // 数据库模块示例 const DOMAIN_UI 0x0003; // UI 模块示例3.2 TAG 标签// 按模块定义 TAG const TAG_LIFECYCLE Lifecycle; // 生命周期日志 const TAG_PAGE Page; // 页面加载日志 const TAG_DATABASE Database; // 数据库操作日志 const TAG_NETWORK Network; // 网络请求日志 const TAG_STORAGE Storage; // 数据存储日志 // 使用示例 hilog.info(DOMAIN_APP, TAG_LIFECYCLE, EntryAbility onCreate); hilog.info(DOMAIN_APP, TAG_PAGE, SplashPage loaded successfully);DOMAIN 和 TAG 的组合可以精确过滤日志DOMAINTAG过滤效果0x0000Lifecycle只看生命周期日志0x0000Page只看页面加载日志0x0001Network只看网络模块日志四、隐私保护机制4.1 格式化占位符// 公开数据%{public}s— 可被日志系统输出 hilog.info(DOMAIN, testTag, User action: %{public}s, onClick); // 私有数据%{private}s— 被日志系统过滤为 private const userPhone 138****8888; hilog.info(DOMAIN, testTag, User phone: %{private}s, userPhone); // 输出: User phone: private4.2 占位符类型对照占位符类型隐私级别输出示例%{public}s字符串公开正常输出%{private}s字符串私有输出private%{public}d整数公开正常输出%{private}d整数私有输出private%{public}f浮点数公开正常输出%{private}f浮点数私有输出private4.3 萌宠日记的隐私策略// 公开数据日志级别、通用信息 hilog.info(DOMAIN, testTag, %{public}s, Ability onCreate); hilog.error(DOMAIN, testTag, Failed to set colorMode. Cause: %{public}s, JSON.stringify(err)); // 私有数据用户信息、敏感配置 // 当前版本未使用 %{private}s因为记录的均为通用信息五、日志查看方法5.1 使用 hdc 命令# 查看所有日志 hdc hilog # 按 TAG 过滤 hdc hilog -T testTag # 按级别过滤只显示 ERROR 及以上 hdc hilog -L ERROR # 按关键字过滤 hdc hilog | grep Ability # 实时监控日志 hdc hilog -T testTag | grep -E onCreate|onDestroy5.2 在 DevEco Studio 中查看DevEco Studio 提供了Log 面板支持功能操作方式说明级别过滤点击级别按钮按 DEBUG/INFO/WARN/ERROR 过滤关键字搜索搜索框输入按文本内容搜索TAG 过滤配置过滤规则按 TAG 精确过滤日志导出右键 → 导出保存日志到文件5.3 日志查看命令详解# 清除缓冲区日志 hdc hilog -r # 设置日志缓冲区大小KB hdc hilog -b 512 # 输出日志到文件 hdc hilog /tmp/app_log.txt # 仅输出指定 DOMAIN 的日志 hdc hilog -D 0x0000六、日志在萌宠日记中的应用6.1 生命周期日志// EntryAbility.ets — 完整的生命周期日志 export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onCreate); // 初始化逻辑... } onDestroy(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onDestroy); } onWindowStageCreate(windowStage: window.WindowStage): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onWindowStageCreate); windowStage.loadContent(pages/SplashPage, (err) { if (err.code) { hilog.error(DOMAIN, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err)); return; } hilog.info(DOMAIN, testTag, Succeeded in loading the content.); }); } onForeground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onForeground); } onBackground(): void { hilog.info(DOMAIN, testTag, %{public}s, Ability onBackground); } }6.2 页面加载日志// 页面加载成功/失败的关键日志 windowStage.loadContent(pages/SplashPage, (err) { if (err.code) { // ERROR 级别记录错误码和错误详情 hilog.error(DOMAIN, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err)); return; } // INFO 级别记录成功信息 hilog.info(DOMAIN, testTag, Succeeded in loading the content.); });七、日志最佳实践7.1 日志规范有序列表 — 日志编写的 5 条规范统一 TAG同一模块使用相同的 TAG便于过滤级别准确根据严重程度选择合适的日志级别内容完整包含足够的上下文信息便于定位问题隐私合规用户敏感数据使用%{private}s占位符避免频繁高频循环中避免输出日志防止性能影响7.2 日志格式模板// 推荐的日志格式模板 // [模块名] 操作描述: 关键数据 // 生命周期 hilog.info(DOMAIN, TAG_LIFECYCLE, [Lifecycle] %{public}s, Ability onCreate); // 页面加载 hilog.info(DOMAIN, TAG_PAGE, [Page] %{public}s loaded: %{public}s, SplashPage, success); // 错误处理 hilog.error(DOMAIN, TAG_DATABASE, [Database] Query failed: %{public}s, errorMessage);八、调试技巧8.1 使用 console.log 快速调试在开发阶段也可以使用console.log快速输出调试信息// 快速调试仅在 DevEco Studio 控制台显示 console.log(SplashPage rendered); console.info(User clicked button); console.error(Operation failed:, errorMessage);8.2 console 与 hilog 对比对比维度consolehilog输出位置DevEco Studio 控制台hdc 命令行 控制台级别控制log/info/warn/errordebug/info/warn/error/fatal隐私保护不支持支持 %{public}s / %{private}s性能同步略慢异步性能更优生产环境不适合适合8.3 调试断点使用// 在关键位置设置断点结合日志定位问题 onWindowStageCreate(windowStage: window.WindowStage): void { // 此处设置断点检查 windowStage 对象 windowStage.loadContent(pages/SplashPage, (err) { // 此处设置断点检查 err.code if (err.code) { hilog.error(DOMAIN, testTag, Failed: %{public}s, JSON.stringify(err)); } }); }九、日志性能考量9.1 日志对性能的影响日志操作性能影响优化建议单条日志输出微秒级无影响高频循环中输出毫秒级累积降低频率或使用计数器大量字符串拼接毫秒级使用占位符而非拼接日志写入文件I/O 操作异步写入避免主线程9.2 性能优化// 不好的写法高频循环中输出日志 for (let i 0; i 1000; i) { hilog.info(DOMAIN, testTag, Processing item: %{public}d, i); // ❌ 1000 条日志 } // 好的写法汇总输出 let count 0; for (let i 0; i 1000; i) { count; } hilog.info(DOMAIN, testTag, Processed %{public}d items, count); // ✅ 1 条日志十、错误处理与日志结合10.1 异常捕获与日志// 萌宠日记中的异常处理模式 try { this.context.getApplicationContext() .setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); } catch (err) { // 记录错误日志包含错误详情 hilog.error(DOMAIN, testTag, Failed to set colorMode. Cause: %{public}s, JSON.stringify(err)); // 可选择降级处理 }10.2 错误日志的完整信息// 错误日志应包含的信息 // 1. 错误发生的位置 // 2. 错误的具体原因 // 3. 相关的上下文数据 // 4. 建议的修复方向 hilog.error(DOMAIN, testTag, [%{public}s] Operation: %{public}s, Error: %{public}s, EntryAbility, // 位置 setColorMode, // 操作 JSON.stringify(err) // 错误详情 );总结本文从萌宠日记的日志使用实践出发深入解析了 HarmonyOShilog日志系统的完整使用方法日志级别DEBUG/INFO/WARN/ERROR/FATAL 五级体系DOMAIN 与 TAG日志域和标签的组合过滤隐私保护%{public}s和%{private}s占位符日志查看hdc 命令行和 DevEco Studio Log 面板应用实践生命周期日志、页面加载日志、错误日志性能考量避免高频日志、使用占位符调试技巧console.log、断点、日志格式规范良好的日志习惯是高效开发的基础在后续的开发中我们将持续完善日志体系为应用的稳定运行提供保障。下一篇我们将进入模块二Tab 导航架构首篇讲解Tabs 组件实现底部导航栏。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源hilog 开发指导https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hilog-guidelines日志系统概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/logging-overviewhdc 调试工具https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hdc应用调试指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/debugging性能分析工具https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/performance-analysis错误处理最佳实践https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/error-handlingDevEco Studio 调试指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/deveco-debug应用日志采集https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-log-collection