# logan **Repository Path**: Duke_Bit/logan ## Basic Information - **Project Name**: logan - **Description**: Logan-ext是一个为OpenHarmony开发的日志库,基于美团技术团队的Logan进行鸿蒙化改造并进行拓展而来 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-08-13 - **Last Updated**: 2025-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Logan Library For HarmonyOS Extended Edition ## 简介 [![openHarmony](https://img.shields.io/badge/openharmony-v2.0.0-brightgreen)](https://gitee.com/Duke_Bit/logan/releases/tag/v2.0.0) Logan是一个为OpenHarmony开发的日志库,基于美团技术团队的[Logan](https://github.com/Meituan-Dianping/Logan) 的1.2.12版本的Native 核心开发,并参考Android版本进行了一定程度的拓展。 装饰器部分和console拦截参考了[log4a](https://gitee.com/ericple/log4a)进行设计。对两个库的作者及贡献者,感谢!。 - 支持多线程,可以在task和worker中使用 - 支持console的拦截 - 简洁易用的装饰器,快速打印方法的出参入参 - 默认加密,防止日志明文保存导致泄露 - 支持自定义日志格式 ## 下载安装 ```` ohpm install @duke/logan-ext ```` OpenHarmony ohpm 环境配置等更多内容,请参考[如何安装 OpenHarmony ohpm 包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md) ## 使用说明 ### 基本用法 导入Logan库: ```typescript import { Logan, getDefaultConfig, LoggerManager, Logger } from '@duke/logan-ext'; ``` 初始化:需要在app启动时调用,仅能在主线程进行调用,setDebug和setOnLoganProtocolStatus为可选调用 ```typescript 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); ``` 日志打印并保存:(支持格式化) ```typescript LoggerManager.getLogger("Index" | object).debug("Test Log") ``` 日志写入:(不会打印在控制台,也不支持格式化) ```typescript Logan.log(LogLogLevel.DEBUG, "Index", "Test Log") ``` 日志强制写入: ```typescript Logan.flush() ``` ### 装饰器 入参: - @LogCall :打印方法入参以类名为Tag ```typescript class Test { @LogCall test(a: string, b: number): number { return a + b } } ``` - @LogResult :打印方法返回值以类名为Tag ```typescript class Test { @LogResult test(a: string, b: number): number { return a + b } } ``` ### 日志上报 参考Logan的Android版本进行封装,功能和API基本一致 ### API 文档 #### Decorators 装饰器模块提供了便捷的日志记录方式,可以直接应用于类的方法上。 | 装饰器 | 描述 | |:-------------|:----------------------------| | @LogCall | 记录方法调用参数,会在方法执行前打印日志 | | @LogResult | 记录方法执行结果,会在方法执行后打印返回值或异常信息 | | @LogTemplate | 模板字符串日志,用于记录模板字符串的构建过程和参数信息 | #### Logan Logan是核心日志操作模块,提供了日志初始化、写入和刷新等基础功能。 | 方法名 | 入参 | 描述 | |:--------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------| | init | config: LoganConfig | 初始化日志系统,需要在应用启动时调用 | | log | level: LogLevel, 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,sendLogCallback: (statusCode: number)=>void | 使用默认方法进行日志上报 | | getAllFilesInfo | 无 | 获取所有日志文件信息 | #### LoganConfig | 方法名 | 入参 | 描述 | |:-------------------------|:-------------------------------------------------------------------------------------|:----------------------| | getDefaultConfig | cacheDir: string, fileDir: string, encryptKey16: Uint8Array, encryptIv16: Uint8Array | 获取默认配置对象,用于初始化日志系统 | #### Logger Logger是日志记录器,提供了不同级别的日志记录方法。 | 方法名 | 入参 | 描述 | |:------|:-----------------------------------------------------------|:-----------| | debug | format: string, ...args: Array | 记录调试级别日志 | | info | format: string, ...args: Array | 记录信息级别日志 | | warn | format: string, ...args: Array | 记录警告级别日志 | | error | format: string, ...args: Array | 记录错误级别日志 | | fatal | format: string, ...args: Array | 记录致命错误级别日志 | | log | format: string, ...args: Array | 记录信息级别日志 | #### LoggerManager LoggerManager是日志管理器,用于获取和管理Logger实例。 | 方法名 | 入参 | 描述 | |:-----------------|:---------------------|:------------------------------------| | getLogger | context: T \| string | 获取指定类或名称的Logger实例 | | 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-ext库文件夹 | |---- build # logan模块打包后的文件 | |---- index.ets # 对外接口 | |---- README.md # 安装使用方法 | |---- CHANGELOG.md # 更新日志 ```` ## 贡献代码 使用过程中发现任何问题都可以提 [Issue](https://gitee.com/Duke_Bit/logan/issues) 给我,当然,我也非常欢迎你给我发 [PR](https://gitee.com/Duke_Bit/logan) 。 ## 开源协议 本项目基于 [MIT license](https://gitee.com/Duke_Bit/logan/blob/master/LICENSE) ,请自由地享受和参与开源。 ## 后续计划 - 将Logan核心部分分拆,贡献到Logan的核心仓库上。 ## 其他库 - [websocket-client](https://ohpm.openharmony.cn/#/cn/detail/@duke%2Fwebsocket-client) WebSocket库解决官方API的一些bug问题: [https://gitee.com/Duke_Bit/websocket](https://gitee.com/Duke_Bit/websocket) - [eventpost](https://ohpm.openharmony.cn/#/cn/detail/eventpost) 事件分发,支持组件中的lifecycle,在组件中使用自动取消订阅: [https://gitee.com/Duke_Bit/eventpost](https://gitee.com/Duke_Bit/eventpost) - [@duke/component-lifecycle](https://ohpm.openharmony.cn/#/cn/detail/@duke%2Fcomponent-lifecycle) 鸿蒙版本的Lifecycle库,支持组件、Router和Navigation: [https://gitee.com/Duke_Bit/component-lifecycle](https://gitee.com/Duke_Bit/component-lifecycle) - [@duke/elf-dialog](https://ohpm.openharmony.cn/#/cn/detail/@duke%2Felf-dialog) CustomDialog黑魔法 不依赖promptAction 实现的函数级弹窗,省去复杂的模版代码,让你专注于你的业务,一行代码搞定弹窗: [https://gitee.com/Duke_Bit/elf-dialog](https://gitee.com/Duke_Bit/elf-dialog) - [@duke/elf-refresh](https://ohpm.openharmony.cn/#/cn/detail/@duke%2Felf-refresh) OpenHarmony 刷新组件,支持下拉刷新和上拉加载更多,支持各种组件,List、Grid,支持header,footer,目标打造HarmonyOS的SmartRefreshLayout: [https://gitee.com/Duke_Bit/ElfRefresh](https://gitee.com/Duke_Bit/ElfRefresh)