文章目录
- 一、前言
- 二、两者区别对比
- 三、HiLog 详解
- 四、拓展阅读
一、前言
在日常开发阶段,日志打印是调试程序非常常用的操作,在鸿蒙的官方文档中介绍了hilog这种方式,前端转过来的开发者发现console.log
也可以进行日志打印,而且看起来好像更加简单方便。
那么,为何鸿蒙官方还要力荐hilog
这种方式日志打印方式呢?console.log
和hilog
究竟有什么区别?
二、两者区别对比
首先要说的是console.log
和hilog
都有info
、debug
、warn
、error
等几个打印日志的方法,代表不同的日志级别。
接下来分别看一下两者打印相同内容时的区别:
hilog.debug(0x0001, "testTag", "hello world");
console.debug('hello world');
从执行结果后半部分来看两者好像没有什么区别,但前半部分略有不同。hilog
打印的内容是A00001/testTag
,console
打印的前半部分是A03d00/JSAPP
。
这里不得不提到hilog
的四个参数部分:日志级别、日志领域、日志标识和日志内容,前半部分这两个东西分别是日志领域和日志标识。A00001/testTag
在上面的代码输出部分可以找到对应的内容,代表我们是可以对它进行自定义的。而在console
中这一部分是默认的,可以认为console
就是对hilog
的封装,需要开发者自定义的内容少了,所以它用起来更加简单。
但是,凡事都有两面性,console
在简单的同时也降低了灵活性,开发者无法自定义日志的业务域和标识,所以有时候无法对代码进行定位。
由此可见,在大型项目中应用hilog
对日志进行统一管理是很有必要的,而且这也是官方文档比较推荐的方式。
三、HiLog 详解
HiLog
接口信息如下:
注意⚠️,
isLoggable()
和具体日志打印接口使用的domain
和tag
应保持一致。isLoggable()
使用的level
,应和具体日志打印接口级别保持一致。
参数说明
-
domain
:用于指定输出日志所对应的业务领域,取值范围为0x0000~0xFFFF
,开发者可以根据需要进行自定义。 -
tag
:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。tag
最多为31字节,超出后会截断,不建议使用中文字符,可能出现乱码或者对齐问题。 -
level
:用于指定日志级别。取值见LogLevel。 -
format
:格式字符串,用于日志的格式化输出。日志打印的格式化参数需按照“%{private flag}specifier
”的格式打印。
格式字符串中可以设置多个参数,例如格式字符串为“%s World”
,“%s
”为参数类型为string
的变参标识,具体取值在args中定义。
args
:可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。
约束与限制⚠️
日志打印最多打印4096字节,超出限制文本将被截断。
hilog
应用示例如下:
// Index.ets
import { hilog } from '@kit.PerformanceAnalysisKit';
@Entry
@Component
struct Index {
build() {
Row() {
Column() {
// 添加按钮,以响应用户点击
Button() {
Text('Next')
.fontSize(30)
.fontWeight(FontWeight.Bold)
}
.type(ButtonType.Capsule)
.margin({
top: 20
})
.backgroundColor('#0D9FFB')
.width('40%')
.height('5%')
// 跳转按钮绑定onClick事件,点击时打印日志
.onClick(() => {
hilog.isLoggable(0xFF00, "testTag", hilog.LogLevel.INFO);
hilog.info(0xFF00, "testTag", "%{public}s World %{public}d", "hello", 3);
})
}
.width('100%')
}
.height('100%')
}
}
四、拓展阅读
- 《HiLog 官方文档》
- 《Console (控制台)》