介绍
Logger是一款简单、漂亮、实用的鸿蒙应用日志框架,是基于鸿蒙系统提供的hiLog日志库封装的,主要特性:
- 支持堆栈信息输出;
- 支持众多数据格式输出,如基本数据类型、对象、Map、List、JSON等格式,可以一次性打印多个类型的数据格式;
- 支持在日志定位跳转到源码;
- 支持自定义日志行为,比如日志上报、缓存本地等。
日志在控制台的打印效果,如下:
安装
ohpm install @hzw/logger
或者安装本地包
ohpm install ../libs/logger.har
使用
初始化
默认情况下是不需要手动初始化的,直接通过Logger类调用不同level的函数打印日志,如下:
const map = new Map<string, Object>()
map.set('name', 'HZWei')
map.set('age', '18')
map.set('user', new UserInfo('HZWei', 20))
Logger.f(map)
但还是建议你通过Logger的init()方法进行初始化配置,默认配置在release环境是不会关闭日志输出的。
可根据你自身需求来初始化配置信息,如下:
Logger.init({
domain: 0x6666,
showStack: true,
fullStack: false,
showDivider: true,
debug:true,
tag: 'xml'
} as LogConfig)
配置参数:
- domain: 作用域,是一个十六进制整数,范围从0x0到0xffff
- tag:日志标记,默认是Logger
- debug:控制是否打印日志,为true时会输出日志,反之则不会
- fullStack:是否输出全部堆栈信息,建议设为false,日志会更简洁
- showStack:是否显示堆栈信息
- showDivider:是否显示分割线
export interface LogConfig {
readonly domain: number
readonly tag?: string
readonly debug: boolean
readonly fullStack?: boolean
readonly showStack?: boolean
readonly showDivider?: boolean,
}
打印各种数据格式
// 基本数据类型
const msg = 'Hello World';
const msg2 = 'Hello Logger';
Logger.i(msg)
// 数组
const messages = [msg, msg2]
Logger.d(messages)
// 多个数据格式一起打印
const user = new UserInfo('HZWei', 18)
Logger.w(user)
Logger.e(user, messages, 12, true)
// json
Logger.json(user)
// map
const map = new Map<string, Object>()
map.set('name', 'HZWei')
map.set('age', '18')
map.set('user', new UserInfo('HZWei', 20))
Logger.f(map)
// ArrayList
const list = new ArrayList<string>()
list.add('HZWei')
list.add('XML')
Logger.w(list)
// 自定义tag
Logger.wt('hzw',20)
自定义日志行为
目前Logger内置只支持在控制台打印,如果你需要将日志上传到服务器或者保存本地,可以实现ILogAdapter接口来实现对应的逻辑。
ILogAdapter是日志适配器的抽象接口,定义了与日志记录相关的操作,比如日志开关控制和日志信息行为出口。
export class UplaodLogAdapter implements ILogAdapter{
// 控制是否上传
isLoggable(level: hilog.LogLevel, tag: string): boolean {
return true / false
}
// 实现上传逻辑
log(level: hilog.LogLevel, tag: string, msg: string, ...args: ObjectOrNull[]): void {
}
}
接着通过Logger的addLogAdapter()方法将UplaodLogAdapter实例添加到适配器容器中。
Logger.addLogAdapter(new UplaodLogAdapter())
工作流程图
Logger框架整个的流程图:
LogPrinter负责管理日志适配器(ILogAdapter)和分发日志信息,Logger类是对外使用的入口,通过此类可以与不同的日志适配器进行交互,从而实现日志的记录和输出,符合依赖倒置原则,使得Logger类依赖于ILogAdapter接口,而非依赖具体的适配器实现,从而提高了代码的扩展性和维护性。
其他
记得将IDE的soft-wrap
开关关闭,不然分割线会自动换行,会出现错乱问题。