HarmonyOS中的日志 原创

starLWW
发布于 2021-8-9 12:02
浏览
3收藏

  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参数或日志内容关键词进行筛选,从而得到对应的日志信息。

HarmonyOS中的日志-鸿蒙开发者社区

  结果输出:

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窗口左侧各个按钮的作用为:

图标 功能描述
HarmonyOS中的日志-鸿蒙开发者社区 点击该按钮可以启用换行并防止水平滚动
HarmonyOS中的日志-鸿蒙开发者社区 点击该按钮可以跳转到日志底部,查看最新的日志消息
HarmonyOS中的日志-鸿蒙开发者社区 点击该按钮可以清理设备的日志缓存,并清除当前窗口的日志。建议每次调试应用前,点击该按钮清除日志
HarmonyOS中的日志-鸿蒙开发者社区 点击该按钮可以对当前选择的设备进行截屏,并保存在本地
HarmonyOS中的日志-鸿蒙开发者社区 点击该按钮可进行上下分屏成两个日志窗口,开发者可以同时查看两个设备的日志,或者同一设备的不同进程

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-8-9 21:24:45修改
4
收藏 3
回复
举报
2条回复
按时间正序
/
按时间倒序
chaoxiaoshu
chaoxiaoshu

好久没用过日志了,也不知道现在日志的问题解决了没

回复
2021-8-9 16:12:46
starLWW
starLWW 回复了 chaoxiaoshu
好久没用过日志了,也不知道现在日志的问题解决了没

还是有问题的,比如在规格化日志参数时指定私有标识符:%{private}s,目前测试无效

回复
2021-8-9 21:15:05
回复
    相关推荐