介绍
在应用开发过程中,可在关键代码处输出日志信息。在运行应用后,通过查看日志信息来分析应用执行情况(如应用是否正常运行、代码运行时序、运行逻辑分支是否正常等)
类比:相当于 Log4j日志
权限级别
定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别
DEBUG
值:3
详细的流程记录,通过该级别的日志可以更详细地分析业务流程和定位分析问题。
INFO
值:4
用于记录业务关键流程节点,可以还原业务的主要运行过程;
用于记录可预料的非正常情况信息,如无网络信号、登录失败等。
这些日志都应该由该业务内处于支配地位的模块来记录,避免在多个被调用的模块或低级函数中重复记录。
WARN
值:5
用于记录较为严重的非预期情况,但是对用户影响不大,应用可以自动恢复或通过简单的操作就可以恢复的问题。
ERROR
值:6
应用发生了错误,该错误会影响功能的正常运行或用户的正常使用,可以恢复但恢复代价较高,如重置数据等。
FATAL
值:7
重大致命异常,表明应用即将崩溃,故障无法恢复。
导入模块
import { hilog } from '@kit.PerformanceAnalysisKit';
打印日志方法
hilog.debug
打印DEBUG级别的日志。DEBUG级别的日志在 正式发布版本中默认不被打印,只有在调试版本或打开调试开关的情况下才会打印。
debug(domain: number, tag: string, format: string, ...args: any[]) : void
参数
domain:类型:number,必填,日志对应的领域标识,范围是
0x0~0xFFFF。建议开发者在应用内根据需要自定义划分。tag:类型:string,必填,指定日志标识,可以为任意字符串,建议用于标识调用所在的类或者业务行为。tag最多为
31字节,超出后会截断,不建议使用中文字符,可能出现乱码或者对齐问题。format:类型:string,必填,格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,参数需要包含参数类型、隐私标识。
隐私标识:分为{public}和{private},缺省为{private}。标识{public}的内容明文输出,标识{private}的内容以<private>过滤回显。
类型:s表示字符串d表示number类型i表示bigint类型
args:类型:
any[],与格式字符串对应的参数列表。参数数量、类型 必须与格式字符串中的标识一一对应。
例子1
输出一条DEBUG信息:
hilog.debug(0x0001, "testTag", "%{public}s World %{private}d", "hello", 3);
解释:
%{public}s:为明文显示的字符串,字符串"hello"填入%{public}s%{private}d:为隐私的整型数,整型数3填入%{private}d
打印结果:
08-05 12:21:47.579 2695 2703 D A00001/testTag: hello World <private>
解释:
- D:表示
debug - A00001:表示
0x0001
hilog.info
打印INFO级别的日志。
info(domain: number, tag: string, format: string, ...args: any[]) : void
参数
与 hilog.debug 相同
例子
let testObj: Record<string, string | number> = {
'name': "Jack",
'age': 22
}
let isBol = true;
let bigNum = BigInt(1234567890123456789);
hilog.info(0x0001, "jsHilogTest", "print object: %{public}s", JSON.stringify(testObj));
hilog.info(0x0001, "jsHilogTest", "private flag: %{private}s %s, print null: %{public}s", "hello", "world", null);
hilog.info(0x0001, "jsHilogTest", "print undefined: %{public}s", undefined);
hilog.info(0x0001, "jsHilogTest", "print number: %{public}d %{public}i", 123, 456);
hilog.info(0x0001, "jsHilogTest", "print bigNum: %{public}d %{public}i", bigNum, bigNum);
hilog.info(0x0001, "jsHilogTest", "print boolean: %{public}s", isBol);
打印结果
08-09 13:26:29.094 2266 2266 I A00001/jsHilogTest: print object: {"name":"Jack","age":22}
08-09 13:26:29.094 2266 2266 I A00001/jsHilogTest: private flag: <private> <private>, print null: null
08-09 13:26:29.094 2266 2266 I A00001/jsHilogTest: print undefined: undefined
08-09 13:26:29.094 2266 2266 I A00001/jsHilogTest: print number: 123 456
08-09 13:26:29.095 2266 2266 I A00001/jsHilogTest: print bigNum: 1234567890123456768 1234567890123456768
08-09 13:26:29.095 2266 2266 I A00001/jsHilogTest: print boolean: true
hilog.warn
打印WARN级别的日志。
warn(domain: number, tag: string, format: string, ...args: any[]) : void
参数
与 hilog.debug 相同
hilog.error
打印ERROR级别的日志。
error(domain: number, tag: string, format: string, ...args: any[]) : void
参数
与 hilog.debug 相同
hilog.fatal
打印FATAL级别的日志。
fatal(domain: number, tag: string, format: string, ...args: any[]) : void
参数
与 hilog.debug 相同
与 console 比较
console 是对 HiLog 的封装,使用时相对简单
比较:
const DOMAIN = 0x0000;
const TAG = "授权(RequestPermissions.ets)-----"
hilog.error(DOMAIN, TAG, 'context不能为空');
console.error( 'context不能为空');
执行结果:
12-19 10:29:21.914 21209-21209 A00000/授权(Requ...issions.ets)- com.examp...lication E context不能为空
12-19 10:29:21.914 21209-21209 A03d00/JSAPP com.examp...lication E context不能为空
结论
hilog.error的DOMAIN、TAG可以自定义
console的DOMAIN是固定值A03d00console的tag是固定值JSAPP