HarmonyOS

文章40 |   阅读 20978 |   点赞0

来源:https://blog.csdn.net/forever_wj/category_11128883.html

HarmonyOS之调试分析打印HiLog日志

x33g5p2x  于2022-03-07 转载在 其他  
字(3.2k)|赞(0)|评价(0)|浏览(626)
一、HiLog 日志
  • HarmonyOS 提供了 HiLog 日志系统,让应用可以按照指定类型、指定级别、指定格式字符串输出日志内容,帮助开发者了解应用的运行状态,更好地调试程序。
  • 输出日志的接口由 HiLog 类提供,在输出日志前,需要先调用 HiLog 的辅助类 HiLogLabel 定义日志标签。
二、定义日志标签
  • 使用 HiLogLabel(int type, int domain, String tag)定义日志标签,其中包括了日志类型、业务领域和 TAG。使用示例:
static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
  • 参数说明:
    • 参数 type:用于指定输出日志的类型。HiLog 中当前只提供了一种日志类型,即应用日志类型 LOG_APP。
    • 参数 domain:用于指定输出日志所对应的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。
    • 参数 tag:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。
  • 开发者可以根据自定义参数 domain 和 tag 来进行日志的筛选和查找。
三、输出日志
  • HiLog 中定义了 DEBUG、INFO、WARN、ERROR、FATAL 五种日志级别,并提供了对应的方法用于输出不同级别的日志。
  • HiLog 提供的主要接口:
接口名功能描述
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 中定义。每个参数需添加隐私标识,分为{public}或{private},默认为{private}。{public}表示日志打印结果可见;{private}表示日志打印结果不可见,输出结果为 < private >。
    • 参数 args:可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。
  • 以输出一条 WARN 级别的信息为例,示例代码:
HiLog.warn(LABEL, "Failed to visit %{private}s, reason:%{public}d.", url, errno);
  • 该行代码表示输出一个日志标签为 label 的警告信息,格式字符串为:“Failed to visit %{private}s, reason:%{public}d.”。其中变参 url 的格式为私有的字符串,errno 为公共的整型数。
四、查看日志信息
  • DevEco Studio 提供了 HiLog 窗口查看日志信息,开发者可通过设置设备、进程、日志级别和搜索关键词来筛选日志信息。搜索功能支持使用正则表达式,开发者可通过搜索自定义的业务领域值和 TAG 来筛选日志信息。
  • 如示例所示,根据实际情况选择了设备和进程后,搜索业务领域值“00201”进行筛选,得到对应的日志信息。

  • 结果输出:
06-23 16:08:36.908 23597-23597/com.example.myapplication W 00201/MY_TAG: Failed to visit <private>, reason:503.
  • 结果分析:

  • W 表示日志级别为 WARN。

  • 00201/MY_TAG 为开发者在 HiLogLabel 中定义的内容。

  • 日志内容中的 url 为私有参数不显示具体内容,仅显示 < private >。errno 为公有参数,显示实际取值 503。

五、日志打印实例
  • 在按钮中增加一个点击事件,点击按钮时打印一条日志。
  • 新建一个工程,选择 Java 的空白模板。
  • 新建一个工程,在“Project”窗口点击“entry > src > main > java > 应用包名 > slice”,打开工程中的“MainAbilitySlice.java”文件,添加一个按钮,实现点击按钮打印一条日志,示例代码如下:
package com.example.myapplication.slice; // 请开发者根据实际情况写包名
	
	import ohos.aafwk.ability.AbilitySlice;
	import ohos.aafwk.content.Intent;
	import ohos.agp.components.Button;
	
	import ohos.agp.components.DirectionalLayout;
	import ohos.hiviewdfx.HiLog;
	import ohos.hiviewdfx.HiLogLabel;
	
	public class MainAbilitySlice extends AbilitySlice {
	
	    // 定义日志标签
	    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
	
	    @Override
	    public void onStart(Intent intent) {
	        super.onStart(intent);
	
	        // 添加一个按钮
	        DirectionalLayout directionalLayout = new DirectionalLayout(getContext());
	        Button button = new Button(getContext());
	        button.setText("Click!");
	        button.setTextSize(200);
	
	        if (button != null) {
	            // 为按钮设置点击回调
	            button.setClickedListener(component -> {
	                    // 打印一条日志
	                    HiLog.info(LABEL, "Hey! You have successfully printed a log.");
	            });
	        }
	
	        directionalLayout.addComponent(button);
	        super.setUIContent(directionalLayout);
	    }
	
	    @Override
	    public void onActive() {
	        super.onActive();
	    }
	
	    @Override
	    public void onForeground(Intent intent) {
	        super.onForeground(intent);
	    }
	}
  • 在模拟器或者真机上运行项目,点击应用界面上的按钮。
  • 在 DevEco Studio 的底部,切换到“HiLog”窗口,设置日志的过滤条件。
    选择当前的设备及进程,日志级别选择 Info,搜索内容设置为“00201”。此时窗口仅显示符合条件的日志,效果如图所示:

相关文章