Logan是一个为OpenHarmony开发的日志库,基于美团技术团队的Logan 的1.2.12版本的Native 核心开发,并参考Android版本进行了一定程度的拓展。 装饰器部分和console拦截参考了log4a进行设计。对两个库的作者及贡献者,感谢!。
- 支持多线程,可以在task和worker中使用
- 支持console的拦截
- 简洁易用的装饰器,快速打印方法的出参入参
- 默认加密,防止日志明文保存导致泄露
- 支持自定义日志格式
ohpm install @duke/logan-ext
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
导入Logan库:
import { Logan, getDefaultConfig, LoggerManager, Logger } from '@duke/logan-ext';初始化:需要在app启动时调用,仅能在主线程进行调用,setDebug和setOnLoganProtocolStatus为可选调用
let config = getDefaultConfig(context.cacheDir,
context.filesDir, en.encodeInto("0123456789012345"),
en.encodeInto("0123456789012345"));
Logan.setDebug(true)
let ff: OnLoganProtocolStatus =
(cmd: string, code: number) => {
console.log("cmd:" + cmd + " code:" + code)
}
Logan.setOnLoganProtocolStatus(ff)
Logan.init(config);日志打印并保存:(支持格式化)
LoggerManager.getLogger("Index" | object).debug("Test Log")日志写入:(不会打印在控制台,也不支持格式化)
Logan.log(LogLogLevel.DEBUG, "Index", "Test Log")日志强制写入:
Logan.flush()入参:
- @LogCall :打印方法入参以类名为Tag
class Test {
@LogCall
test(a: string, b: number): number {
return a + b
}
}- @LogResult :打印方法返回值以类名为Tag
class Test {
@LogResult
test(a: string, b: number): number {
return a + b
}
}参考Logan的Android版本进行封装,功能和API基本一致
装饰器模块提供了便捷的日志记录方式,可以直接应用于类的方法上。
| 装饰器 | 描述 |
|---|---|
| @LogCall | 记录方法调用参数,会在方法执行前打印日志 |
| @LogResult | 记录方法执行结果,会在方法执行后打印返回值或异常信息 |
| @LogTemplate | 模板字符串日志,用于记录模板字符串的构建过程和参数信息 |
Logan是核心日志操作模块,提供了日志初始化、写入和刷新等基础功能。
| 方法名 | 入参 | 描述 |
|---|---|---|
| init | config: LoganConfig | 初始化日志系统,需要在应用启动时调用 |
| setDefaultType | type: number | 设置默认日志类型 |
| log | type: number, tag: string, msg: string | 写入日志,支持不同日志级别 |
| flush | 无 | 强制将缓冲区的日志写入文件 |
| setDebug | isDebug: boolean | 设置调试模式,开启后会输出更多调试信息 |
| setOnLoganProtocolStatus | callback: (cmd: string, code: number) => void | 设置日志协议状态回调,用于监听日志操作结果 |
| send | dates: string[], task: SendLogTask | 日志上报 |
| sendFromDefault | url: string, date:string,appId:string,unionId:string,deviceId:string,buildVersion:string,appVersion:string,sendLogCallback: (statusCode: number) => void | 使用默认方法进行日志上报 |
| sendFromDefaultWithHeader | url: string, date:string,header:Map<string,string>,sendLogCallback: (statusCode: number)=>void | 使用默认方法进行日志上报 |
| getAllFilesInfo | 无 | 获取所有日志文件信息 |
| 方法名 | 入参 | 描述 |
|---|---|---|
| getDefaultConfig | cacheDir: string, fileDir: string, encryptKey16: Uint8Array, encryptIv16: Uint8Array | 获取默认配置对象,用于初始化日志系统 |
Logger是日志记录器,提供了不同级别的日志记录方法。
| 方法名 | 入参 | 描述 |
|---|---|---|
| debug | format: string, ...args: Array<string | object | number> | 记录调试级别日志 |
| info | format: string, ...args: Array<string | object | number> | 记录信息级别日志 |
| warn | format: string, ...args: Array<string | object | number> | 记录警告级别日志 |
| error | format: string, ...args: Array<string | object | number> | 记录错误级别日志 |
| fatal | format: string, ...args: Array<string | object | number> | 记录致命错误级别日志 |
| log | format: string, ...args: Array<string | object | number> | 记录信息级别日志 |
LoggerManager是日志管理器,用于获取和管理Logger实例。
| 方法名 | 入参 | 描述 |
|---|---|---|
| setDefaultType | type: number | 设置默认日志类型 |
| getLogger | context: T | string,type:number | 获取指定类或名称的Logger实例,type 为最终写入文件的type |
| interceptConsole | 无 | 拦截console日志,将console输出重定向到Logan日志系统 |
在下述版本验证通过:
DevEco Studio: 5.0.5.315, SDK: HarmonyOS 5.0.1 Release Ohos_sdk_public 5.0.1.115 (API Version 13 Release)
|---- Logan
| |---- AppScrope # 示例代码文件夹
| |---- entry # 示例代码文件夹
| |---- core # Logan库独立发布
| |---- library # logan库文件夹
| |---- build # logan模块打包后的文件
| |---- index.ets # 对外接口
| |---- README.md # 安装使用方法
| |---- CHANGELOG.md # 更新日志
使用过程中发现任何问题都可以提 Issue 给我,当然,我也非常欢迎你给我发 PR 。
本项目基于 MIT license ,请自由地享受和参与开源。
- websocket-client WebSocket库解决官方API的一些bug问题: https://gitee.com/Duke_Bit/websocket
- eventpost 事件分发,支持组件中的lifecycle,在组件中使用自动取消订阅: https://gitee.com/Duke_Bit/eventpost
- @duke/component-lifecycle 鸿蒙版本的Lifecycle库,支持组件、Router和Navigation: https://gitee.com/Duke_Bit/component-lifecycle
- @duke/elf-dialog CustomDialog黑魔法 不依赖promptAction 实现的函数级弹窗,省去复杂的模版代码,让你专注于你的业务,一行代码搞定弹窗: https://gitee.com/Duke_Bit/elf-dialog
- @duke/elf-refresh OpenHarmony 刷新组件,支持下拉刷新和上拉加载更多,支持各种组件,List、Grid,支持header,footer,目标打造HarmonyOS的SmartRefreshLayout: https://gitee.com/Duke_Bit/ElfRefresh