【HarmonyOS实战】 Logger日志封装:为什么不直接用console.log? 文章目录前言一、直接用 hilog vs 封装 Logger1.1 直接用 hilog不封装1.2 封装后Logger二、Logger.ets 完整解析三、hilog 参数详解3.1 domain 业务域3.2 %{public}s 是什么四、日志级别对比五、项目中的使用示例5.1 记录正常流程5.2 记录错误5.3 记录用户操作六、可扩展版本的 Logger七、在 DevEco Studio 查看日志总结前言写代码调试时很多人习惯用console.log(打印一下)来输出信息。HarmonyOS 当然也支持console.log但官方推荐用hilog。为什么hilog有分级info/warn/error、有 domain 过滤、日志格式更规范更适合在设备上调试复杂问题。项目里的Logger.ets把hilog封装了一下这篇文章把封装思路讲清楚顺带教你怎么用 DevEco Studio 的日志面板调试。项目预览一、直接用 hilog vs 封装 Logger1.1 直接用 hilog不封装import{hilog}fromkit.PerformanceAnalysisKit;// 每次都要写这三个参数hilog.info(0x0000,NearByGasStationDemo,%{public}s, %{public}s,[初始化,成功]);hilog.error(0x0000,NearByGasStationDemo,%{public}s, %{public}s,[出错,err.message]);问题0x0000是什么每次都要记NearByGasStationDemo是前缀每次都要写一遍格式字符串%{public}s, %{public}s固定但每次都要复制1.2 封装后LoggerLogger.info(testTag,初始化成功);Logger.error(testTag,出错了:${err.message});封装后只需要传关键信息tag 消息其他的都在 Logger 类里统一处理。二、Logger.ets 完整解析// entry/src/main/ets/utils/Logger.etsimport{hilog}fromkit.PerformanceAnalysisKit;exportclassLogger{// 私有静态属性这些是 hilog 的固定参数privatestaticdomain:number0x0000;// 业务域用于过滤日志privatestaticprefix:stringNearByGasStationDemo;// 日志前缀标识来源privatestaticformat:string%{public}s, %{public}s;// 格式字符串// DEBUG 级别只在开发时有用发布版本会被过滤staticdebug(...args:string[]):void{hilog.debug(Logger.domain,Logger.prefix,Logger.format,args);}// INFO 级别正常运行信息staticinfo(...args:string[]):void{hilog.info(Logger.domain,Logger.prefix,Logger.format,args);}// WARN 级别警告不影响运行但需要关注staticwarn(...args:string[]):void{hilog.warn(Logger.domain,Logger.prefix,Logger.format,args);}// ERROR 级别错误影响功能staticerror(...args:string[]):void{hilog.error(Logger.domain,Logger.prefix,Logger.format,args);}}三、hilog 参数详解hilog.info(domain,tag,format,...args)参数类型说明domainnumber业务域0x0000-0xFFFF用于在日志面板过滤tagstring日志标签标识日志来源类似 Android 的 Tagformatstring格式字符串%{public}s是公开字符串占位符argsany[]填充格式字符串的参数3.1 domain 业务域domain是一个 16 进制数字用于按业务模块分组日志。比如// 不同模块使用不同 domain方便过滤constMAP_DOMAIN0x0001;// 地图模块constPERMISSION_DOMAIN0x0002;// 权限模块constNETWORK_DOMAIN0x0003;// 网络模块项目里统一用0x0000简化处理。3.2 %{public}s 是什么%{public}s是 hilog 的格式占位符{public}表示这是公开日志会显示实际内容。如果用%{private}s敏感信息会被替换为private保护隐私。// public日志里显示实际值hilog.info(0x0000,tag,%{public}s,[用户名: 张三]);// 输出: 用户名: 张三// private日志里显示 privatehilog.info(0x0000,tag,%{private}s,[密码: 123456]);// 输出: private四、日志级别对比级别方法颜色DevEco日志面板用途DEBUGLogger.debug蓝色开发时的详细调试信息INFOLogger.info绿色/白色正常运行流程记录WARNLogger.warn黄色警告可能影响体验ERRORLogger.error红色错误功能受影响发布到应用市场时debug级别的日志会被系统过滤不会显示避免性能损耗和信息泄露。五、项目中的使用示例5.1 记录正常流程// EntryAbility.etsonCreate(want:Want,launchParam:AbilityConstant.LaunchParam):void{hilog.info(DOMAIN,testTag,%{public}s,Ability onCreate);}onWindowStageCreate(windowStage:window.WindowStage):void{hilog.info(DOMAIN,testTag,%{public}s,Ability onWindowStageCreate);// ...windowStage.loadContent(pages/MainPage,(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.);});}5.2 记录错误// PermissionsUtil.ets}catch(error){Logger.error(Failed to get bundle info for self. Code is${error.code}, message is${error.message});}// MapUtil.ets用 hilog 直接调用if(err){Logger.error(testTag,init fail, code:${err.code}, message:${err.message});return;}5.3 记录用户操作// GasStationPage.etsthis.mapController.on(myLocationButtonClick,(){Logger.info(testTag,Jump to my location);// ...});六、可扩展版本的 Logger项目里的 Logger 比较基础生产级别的 Logger 可以加更多功能exportclassLogger{privatestaticdomain:number0x0000;privatestaticprefix:stringNearByGasStationDemo;privatestaticformat:string%{public}s, %{public}s;privatestaticisDebugMode:booleantrue;// 可通过配置关闭 debug 日志staticdebug(...args:string[]):void{if(Logger.isDebugMode){hilog.debug(Logger.domain,Logger.prefix,Logger.format,args);}}// 带时间戳的错误日志staticerrorWithTime(tag:string,message:string):void{lettimestampnewDate().toISOString();hilog.error(Logger.domain,Logger.prefix,Logger.format,[[${timestamp}],${tag}:${message}]);}// 格式化对象输出调试用staticlogObject(tag:string,obj:object):void{try{Logger.debug(tag,JSON.stringify(obj,null,2));}catch{Logger.debug(tag,String(obj));}}}七、在 DevEco Studio 查看日志运行应用后点击底部Log标签页选择设备和进程你的应用包名在搜索框里输入NearByGasStationDemo我们定义的 prefix过滤日志可以按级别过滤Debug / Info / Warn / Error常用日志过滤技巧按tag过滤搜索testTag按错误级别过滤点击顶部的 Error 按钮按关键字过滤直接输入关键字总结Logger 封装的核心价值统一配置domain、prefix、format只在一处配置简化调用调用方只传 tag 和消息不关心 hilog 的具体参数方便控制想在生产环境关闭 debug 日志只改一处类型安全static方法直接调用不需要实例化console.log不是不能用但hilog在 HarmonyOS 上更规范、更好过滤、更安全可以保护私密信息。封装成 Logger以后维护起来也更方便。下一篇讲CalculateUtil 距离计算——怎么用经纬度算出两点之间的距离公里数。