HarmonyOS中的日志 原创
HarmonyOS提供了HiLog日志系统,让应用可以按照指定类型、指定级别、指定格式字符串输出日志内容,帮助开发者了解应用的运行状态,更好地调试程序。
输出日志的接口由HiLog类提供。在输出日志前,需要先调用HiLog的辅助类HiLogLabel定义日志标签。
1. 定义日志标签
使用HiLogLabel(int type, int domain, String tag)定义日志标签,其中包括了日志类型、业务领域和TAG。使用示例:
HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
-
参数type:用于指定输出日志的类型。HiLog中当前只提供了一种日志类型,即应用日志类型LOG_APP。
-
参数domain:用于指定输出日志所对应的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。
-
参数tag:用于指定日志标识,可以为任意字符串,建议标识当前所在的类或者业务行为。
开发者可以根据自定义参数domain和tag来进行日志的筛选和查找。
2. 输出日志
HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别,并提供了对应的方法用于输出不同级别的日志,如下表所示。
接口名 | 功能描述 |
---|---|
debug(HiLogLabel label, String format, Object… args) | 输出DEBUG级别的日志。DEBUG级别日志表示仅用于应用调试,默认不输出,输出前需要在设备的“开发人员选项”中打开“USB调试”开关。 |
info(HiLogLabel label, String format, Object… args) | 输出INFO级别的日志。INFO级别日志表示普通的信息。 |
warn(HiLogLabel label, String format, Object… args) | 输出WARN级别的日志。WARN级别日志表示存在警告。 |
error(HiLogLabel label, String format, Object… args) | 输出ERROR级别的日志。ERROR级别日志表示存在错误。 |
fatal(HiLogLabel label, String format, Object… args) | 输出FATAL级别的日志。FATAL级别日志表示出现致命错误、不可恢复错误。 |
-
参数label:定义好的HiLogLabel标签。
-
参数format:格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,例如格式字符串为“Failed to visit %s.”,“%s”为参数类型为string的变参标识,具体取值在不定长参数args中定义。
-
参数args:可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。
从以上表格能够看出,日志输出方法的第3个参数是可变长参数,而可变长参数可以包含的参数个数可以是0个、1个或多个,因此,对于日志输出可以有以下3种用法。
(1)基本方法
日志输出的方法只需给定2个参数即可。以warn()方法为例, 将需要显示在日志中的参数直接拼接在第2个参数中。
要输出的日志内容是常量,如输入日志:“今天天气好晴朗”。则示例代码为:
HiLog.warn(LABEL, "程序出现异常");
假设要输出到日志中的目标参数是url和errno,url的值为“bddylww.com.cn”,errno是整型,其值为503,则示例代码为:
HiLog.warn(LABEL, "Failed to visit " + url + ", reason: " + errno + ".", null);
日志内容可由开发者根据需要自行拼接。
(2)日志格式化参数法
当要输出到日志中的变量需要根据需要格式化输出时,可采用格式化日志法。使用格式化日志法可避免因日志字符串拼接导致的语法错误。
HiLog.warn(LABEL, "Failed to visit %s, reason:%d.", url, errno);
该行代码表示输出一个日志标签为LABEL的警告信息,输出的日志结果中第1个参数(%s指定)将由后面不定长参数中的url参数的值代替,第2个参数(%d指定,表示整数)将由后面不定长参数中的errno参数的值代替。
常见格式化标识符包括:
-
%s:输出字符串
-
%c:输出一个字符
-
%d:输出有符号十进制数
-
%f:浮点数,十进制计数法
-
%o:无符号八进制整数
-
%x:使用十六进制数0f的无符号十六进制整数
-
%%:输出一个百分号
(3)自定义日志类
日志输出需要HiLogLabel和HiLog两个类配合使用,在需要频繁输出日志信息的场合下非常不方便。考虑到在同一个类或同一个包中,日志输出的type、domain、tag参数有可能是相同的,因此可以将系统日志类进行封装,自定义自己的日志类,从而使日志复用性更强。下面以info方法为例,进行说明。
public class MyLog{
private String msg;
private String tag;
private static HiLogLabel lable;
//自定义info()方法
public static void info(String tag, String msg){
lable = new HiLogLabel(HiLog.LOG_APP, 100, tag);
HiLog.info(lable, msg, null);
}
//其他日志级别的方法定义略
}
自定义日志类的使用示例代码如下:
MyLog.info("msg", "我是自定义日志效果");
3. 查看日志信息
DevEco Studio提供了“Log > HiLog”窗口查看日志信息,开发者可通过设置设备、进程、日志级别和搜索关键词来筛选日志信息。搜索功能支持使用正则表达式,开发者可通过搜索自定义的业务领域值和TAG来筛选日志信息。
假设要查看一下日志信息:
HiLog.warn(LABEL, "Failed to visit %s, reason:%d.", url, errno);
如下图所示,根据实际情况选择了设备和进程后,搜索业务领域值“00201”进行筛选,也可以使用HiLogLabel对象的tag参数或日志内容关键词进行筛选,从而得到对应的日志信息。
结果输出:
08-06 16:37:39.183 11521-11521/com.example.lww.helloworld W 00201/MY_TAG: Failed to visit bddylww.com.cn, reason:503.
-
W表示日志级别为WARN。
-
00201/MY_TAG是开发者在HiLogLabel中定义的tag参数内容。
-
日志内容中的url的取值为“bddylww.com.cn”。errno的取值为503。
HiLog窗口左侧各个按钮的作用为:
图标 | 功能描述 |
---|---|
点击该按钮可以启用换行并防止水平滚动 | |
点击该按钮可以跳转到日志底部,查看最新的日志消息 | |
点击该按钮可以清理设备的日志缓存,并清除当前窗口的日志。建议每次调试应用前,点击该按钮清除日志 | |
点击该按钮可以对当前选择的设备进行截屏,并保存在本地 | |
点击该按钮可进行上下分屏成两个日志窗口,开发者可以同时查看两个设备的日志,或者同一设备的不同进程 |
好久没用过日志了,也不知道现在日志的问题解决了没
还是有问题的,比如在规格化日志参数时指定私有标识符:%{private}s,目前测试无效