HarmonyOS之调试分析打印HiLog日志
Posted Forever_wj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS之调试分析打印HiLog日志相关的知识,希望对你有一定的参考价值。
一、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”。此时窗口仅显示符合条件的日志,效果如图所示:
以上是关于HarmonyOS之调试分析打印HiLog日志的主要内容,如果未能解决你的问题,请参考以下文章
HarmonyOS Sample 之 AI能力之NLU引擎服务
3D打印Marlin2.0固件源代码分析之如何使用LOG接口调试代码