Harmony 提供了 HiLog 系统,让应用/服务可以按照 OS 指定类型、指定等级、指定格式输出内容,帮助开发者了解应用/服务的运行状态日志,更好地调试程序。
输出日志的接口由 HiLog 类提供。在输出日志前,需要先调用 HiLog 的辅助类 HiLogLabel 定义日志标签。
一、官方HiLog调试打印
定义日志标签
使用HiLogLabel(int type, int domain, String tag)定义日志标签,其中包括了类型、业务日志领域和TAG。使用示例:
static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
参数类型:用于指定输出日志的类型。HiLog中当前只提供了一种日志类型,即应用类型LOG_APP。
域:用于指定输出所参数的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。
参数标签:用于指定标识,可以为任意字符串,建议标识调用所在的类或业务行为。
输出日志
HiLog 中定义了 DEBUG、INFO、WARN、ERROR、FATAL 五种日志等级,并显示了用于输出不同等级的日志,如下表。
参数标签:定义好的HiLogLabel标签。
格式字符串:格式字符串,用于输出格式的参数。格式字符串中可以设置多个参数,例如格式字符串为“Failed to visit %s.”,“%s”为参数类型为字符串的变参标识,具体取值在参数中定义。
参数需隐私标识,分为{public}或{private},默认为{private}。{public}日志结果可见;{private}表示打印结果不表示日志,输出结果为。
args:可以为0个或多个参数列表,是格式字符串参数中的参数类型的。参数的数量、类型必须与格式字符串中的标识一对应。
输出一条代码WARN等级的信息,示例:
HiLog.warn(LABEL, "Failed to visit %{private}s, reason:%{public}d.", url, errno);
该行代码表示输出一个日志的警告信息,格式字符串为:“Failed to visit %{private}s, reason: %{public}d.” 其中变参url的格式为私有标签的字符串。 ,errno 为公共的整型数。
查看日志信息
DevEco Studio提供了Log > HiLog”查看日志信息,开发者可以通过设置、搜索进程、日志等级和搜索关键词来筛选日志信息。功能支持使用则表达式,开发者可以通过搜索自定义的业务领域值和TAG来筛选日志信息。
如示例所示,根据实际情况选择了设备流程和后,搜索业务领域,进行“00201”值筛选,给您的日志信息。
结果输出:
07-19 14:22:56.071 13849-13849/com.example.myapplication W 00201/MY_TAG: Failed to visit , reason:503.
W表示日志为WARN。
00201/MY_TAG为开发者在HiLogLabel中定义的内容。
日志内容中的网址为参数,不显示具体内容。为公有实际取值503。
二、封装HiLog调试打印
封装HiLog工具类,如下:
public class LogUtils {
private static final String TAG_LOG = "LogUtil";
private static final HiLogLabel LABEL_LOG = new HiLogLabel(0, 0, LogUtils.TAG_LOG);
private static final String LOG_FORMAT = "%{public}s: %{public}s";
private LogUtils() {
}
public static void debug(String tag, String msg) {
HiLog.debug(LABEL_LOG, LOG_FORMAT, tag, msg);
}
public static void info(String tag, String msg) {
HiLog.info(LABEL_LOG, LOG_FORMAT, tag, msg);
}
public static void warn(String tag, String msg) {
HiLog.warn(LABEL_LOG, LOG_FORMAT, tag, msg);
}
public static void error(String tag, String msg) {
HiLog.error(LABEL_LOG, LOG_FORMAT, tag, msg);
}
}
代码中的使用:
LogUtils.debug(TAG, "message is null");
原作者:PengLei