1.4.8 HiLog日志
HiLog 是 HarmonyOS 提供的日志系统。在程序开发时,开发者不仅可以通过打断点的方式来调试程序,还可以在关键位置输出信息来判断程序的执行情况。这种方式不会打断程序的正常运行,对用户是无感的,开发者可以通过记录报错的日志,来判断应用程序的运行情况,从而完成对程序的错误排除和优化。记录程序的执行情况,可以为开发者判断程序运行情况提供最直接的信息。在HarmonyOS中,输出日志需要用到HiLog对象和HiLogLabel对象。
1.HiLog
在HarmonyOS开发过程中,会多次使用HiLog对象来输出程序的执行信息。HiLog日志由HiLog对象来输出,并且为了方便日志的查看,HiLog对象可以根据日志的类别来设置多种日志级别,表1-5是HiLog对象中的方法。
表1-5 HiLog对象中的方法
在打印日志时,为了方便对信息进行分类,不可以随意使用这些方法,否则会带来日志阅读上的困难,影响对程序运行状况的判断。应该先对日志进行分类,然后使用对应的打印方法进行输出。HiLog对象的方法中包含以下三个参数。
(1)label:HiLogLabel标签,用于设置日志的筛选条件。
(2)format:格式字符串,用于日志的格式化输出。
(3)args:可以为 0 个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。
2.HiLogLabel
系统在正常运行时会打印很多日志,如果要在众多的日志中找到要调试的应用程序的日志,就需要对日志进行筛选。HiLogLabel对象用于日志的筛选。它只有以下一个构造方法。
HiLogLabel(int type,int domain,String tag)
HiLogLabel对象的构造方法包括三个参数。
(1)type:用于指定输出日志的类型。HiLog 对象中当前只提供了一种日志类型,即应用日志类型LOG_APP。
(2)domain:用于指定输出日志所对应的业务领域,取值范围为 0x0~0xFFFFF。开发者可以根据需要进行自定义。
(3)tag:用于指定日志标识,可以为任意字符串,建议标识为所在的类或者业务名称。
这些参数可作为筛选日志的条件使用。在一个应用或者某个类内,日志的标签通常不会变,可以将 HiLogLabel 对象作为成员变量来使用,按照以下方式进行声明。
static final HiLogLabel LABEL_LOG=new HiLogLabel(HiLog.LOG_APP,0xD001100,"MY_TAG");
HiLogLabel对象包括以下几种枚举值。
(1)HiLog.LOG_APP:应用日志。
(2)HiLog.INFO:普通日志。
(3)HiLog.DEBUG:调试日志。
(4)HiLog.WARN:警告日志。
(5)HiLog.ERROR:错误日志。
(6)HiLog.FATAL:严重错误日志。
3.HiLog日志控制台
DevEco Studio提供了HiLog日志控制台来查看日志。开发者可以通过设置多种过滤条件来筛选日志,如图1-106所示。
图1-106 HiLog日志控制台
HiLog日志控制台的左侧菜单中的各项含义如下。
Up the stack trace(Alt+Ctrl+向上箭头):向上查看日志。
Down the stack trace(Alt+Ctrl+向下箭头):向下查看日志。
Soft-Wrap:启用日志换行并防止水平滚动。
Scroll to End:时刻滚动到底部,查看最新日志。
Print:调用打印机打印日志。
Clear HiLog:清理设备的日志缓存,并清除当前控制台的日志。建议每次调试应用前,点击该按钮清除日志。
Screen Capture:对当前运行的设备截屏,并将其保存在本地。
HiLog Console Setting:HiLog日志控制台设置,可修改日志颜色、缓冲区大小。
Split Horizontally:将HiLog日志控制台分屏,可以设置不同的筛选条件。
Close:关闭当前的HiLog日志控制台,分屏后可用。
4.日志输出示例
新建 Empty Ability (Java)模板项目,在“Project Type”选区中选择“Application”单选按钮(项目创建方法见1.4.1节,下同),在MainAbilitySlice中编写代码:
启动模拟器,将程序运行起来,在DevEco Studio下方的HiLog日志控制台中,点击“Log”选项,可以看到当前系统打印的 HiLog 日志,如图 1-107所示。随着系统的运行,日志也在不断地输出,我们无法很快地定位到上述程序中打印的日志。
图1-107 HiLog日志
在筛选框中,输入构造HiLogLabel对象时设置的tag参数“MY_TAG”,可以对日志进行筛选,如图1-108所示。
图1-108 使用tag参数筛选日志
可以看到,程序中的日志被打印出来,同时使用颜色对日志级别进行了分类,方便对日志类别进行筛查。同样,使用 domain 参数也可以筛选出相应的日志,如图1-109所示。
图1-109 使用domain参数筛选日志
也可以用domain参数和tag参数的组合来筛选日志,如图1-110所示。
图1-110 使用domain参数和tag参数的组合筛选日志
HiLog日志还支持格式化日志输出,格式字符串中可以设置多个参数,例如格式字符串为“Load%s failed.”,“%s”是参数类型为String的变参标识,具体取值在args中指定。
每个参数都可以添加隐私标识{public}或{private},默认为{private}。{public}表示日志打印结果可见,{private}表示日志打印结果不可见,此时输出的日志为<private>,比如“Load{private}%s failed.”。
在MainAbilitySlice中打印下面的日志:
HiLog.warn(LABEL_LOG,"Load%{private}s failed,reason:%{public}d.","www.harmonyos.com",503);
输出的日志如图1-111所示。
可以看到,被{private}修饰的变量在日志中显示为<private>。
图1-111 <private>日志