easemob-uniapp-logger-plugin 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,216 @@
1
+ /**
2
+ * UniApp 日志收集插件
3
+ * 支持传入 SDK 实例自动获取配置,简化使用
4
+ */
5
+ /** SDK 连接实例接口 */
6
+ export interface SDKConnection {
7
+ /** API 地址(优先使用) */
8
+ apiUrl?: string;
9
+ /** API 地址(兼容下划线命名) */
10
+ api_url?: string;
11
+ /** REST API 地址(某些 SDK 版本使用) */
12
+ restUrl?: string;
13
+ /** SDK 版本 */
14
+ version?: string;
15
+ /** 当前用户 */
16
+ user?: string;
17
+ /** 连接上下文 */
18
+ context?: {
19
+ /** 访问令牌 */
20
+ accessToken?: string;
21
+ /** AppKey */
22
+ appKey?: string;
23
+ };
24
+ /** 请求方法(用于兼容不同 SDK 版本) */
25
+ request?: (options: {
26
+ url: string;
27
+ data?: any;
28
+ method?: string;
29
+ headers?: Record<string, string>;
30
+ }) => Promise<any>;
31
+ }
32
+ export type LogLevel = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL';
33
+ export interface LogEntry {
34
+ level: LogLevel;
35
+ message: string;
36
+ timestamp: number;
37
+ data?: any;
38
+ }
39
+ export interface LoggerConfig {
40
+ /** 日志文件过期天数,0表示不清理 */
41
+ expireDays: number;
42
+ /** 单个日志文件最大大小 (bytes),默认2MB */
43
+ maxFileSize: number;
44
+ /** 日志根目录名 */
45
+ rootDirectory: string;
46
+ /** 日志目录名 */
47
+ directory: string;
48
+ /** 日志文件名 */
49
+ fileName: string;
50
+ /** 批量写入间隔 (ms) */
51
+ flushInterval: number;
52
+ /** 批量写入数量阈值 */
53
+ batchSize: number;
54
+ /** 上传超时时间 (ms),默认30秒 */
55
+ uploadTimeout: number;
56
+ /** 最大保留日志文件数,默认3个(用于日志滚动) */
57
+ maxFiles: number;
58
+ }
59
+ /** 自定义上传处理器 */
60
+ export type CustomUploadHandler = (logContent: string) => Promise<void> | void;
61
+ /** 自定义上传配置 */
62
+ export interface CustomUploadConfig {
63
+ /** 自定义上传 URL(如果不传,使用环信默认上传) */
64
+ url?: string;
65
+ /** 自定义上报 URL(如果不传,使用环信默认上报) */
66
+ reportUrl?: string;
67
+ /** 自定义请求头 */
68
+ headers?: Record<string, string>;
69
+ /** 自定义上传处理器(优先级高于 URL) */
70
+ handler?: CustomUploadHandler;
71
+ }
72
+ export interface LoggerOptions {
73
+ /** SDK 连接实例(传入后自动从中获取 token/user/appKey 等) */
74
+ conn?: SDKConnection;
75
+ /** 日志配置 */
76
+ log?: Partial<LoggerConfig>;
77
+ /** 自定义上传配置(不传则使用环信默认上传) */
78
+ customUpload?: CustomUploadConfig;
79
+ }
80
+ /** SDK 日志数据格式(用于 websdk.logger.onLog) */
81
+ export interface SDKLogData {
82
+ /** 时间字符串,如 "13:42:55:168" */
83
+ time: string;
84
+ /** 日志级别 */
85
+ level: 'debug' | 'info' | 'warn' | 'error' | 'fatal';
86
+ /** 日志内容数组,第一个是消息,后面是参数 */
87
+ logs: unknown[];
88
+ }
89
+ /** SDK 消息对象(CMD 消息等) */
90
+ export interface SDKMessage {
91
+ /** 消息 ID */
92
+ id: string;
93
+ /** 消息类型 */
94
+ type: string;
95
+ /** 聊天类型 */
96
+ chatType?: string;
97
+ /** 发送者 */
98
+ from?: string;
99
+ /** 接收者 */
100
+ to?: string;
101
+ /** CMD 动作 */
102
+ action?: string;
103
+ /** 扩展字段 */
104
+ ext?: Record<string, unknown>;
105
+ /** 时间戳 */
106
+ time?: number;
107
+ /** 在线状态 */
108
+ onlineState?: number;
109
+ /** 消息配置 */
110
+ msgConfig?: Record<string, unknown>;
111
+ }
112
+ /** 设备信息 */
113
+ export interface DeviceInfo {
114
+ deviceBrand?: string;
115
+ deviceModel?: string;
116
+ platform?: string;
117
+ system?: string;
118
+ }
119
+ /**
120
+ * 隐藏 appkey 中的敏感信息
121
+ */
122
+ export declare function maskAppkey(appkey: string, maskChar?: string): string;
123
+ declare class Logger {
124
+ private config;
125
+ private storage;
126
+ private initialized;
127
+ private minLevel;
128
+ /** SDK 连接实例 */
129
+ private conn;
130
+ /** 自定义上传配置 */
131
+ private customUpload?;
132
+ /** 标记是否处于上传流程中,防止上传失败写日志导致循环 */
133
+ private isInUploadProcess;
134
+ constructor();
135
+ /**
136
+ * 初始化日志器
137
+ * @param options - 配置选项,可以传入 SDK 实例自动获取配置
138
+ */
139
+ init(options?: LoggerOptions): void;
140
+ /**
141
+ * 获取 SDK 相关配置
142
+ * 注意:每次调用都实时读取 conn 中的最新值
143
+ */
144
+ private getSDKConfig;
145
+ /**
146
+ * 设置最小日志级别
147
+ */
148
+ setMinLevel(level: LogLevel): void;
149
+ private shouldLog;
150
+ log(level: LogLevel, message: string, data?: unknown): void;
151
+ debug(message: string, data?: unknown): void;
152
+ info(message: string, data?: unknown): void;
153
+ warn(message: string, data?: unknown): void;
154
+ error(message: string, data?: unknown): void;
155
+ fatal(message: string, data?: unknown): void;
156
+ /**
157
+ * 处理来自 SDK 的日志数据
158
+ * 适配 websdk.logger.onLog 的格式
159
+ * @param data - SDK 日志数据 { time, level, logs }
160
+ *
161
+ * @example
162
+ * websdk.logger.onLog = (data) => {
163
+ * logger.handleSDKLog(data);
164
+ * };
165
+ */
166
+ handleSDKLog(data: SDKLogData): void;
167
+ /**
168
+ * 处理 CMD 消息,检测是否为上传日志指令
169
+ * 收到指令后立即 flush 缓存并上传
170
+ * @param message - SDK 消息对象
171
+ */
172
+ private handleCmdMessage;
173
+ /**
174
+ * 立即刷新所有待写入的日志到文件
175
+ */
176
+ flush(): Promise<void>;
177
+ private consoleOutput;
178
+ read(): Promise<string>;
179
+ getFilePath(): string;
180
+ clear(): Promise<void>;
181
+ compress(targetPath?: string): Promise<string | null>;
182
+ removeFile(path: string): Promise<void>;
183
+ /**
184
+ * 上传日志文件
185
+ * 支持多种上传方式:
186
+ * 1. 传入自定义 handler 时使用自定义上传
187
+ * 2. 传入自定义 URL 时使用自定义 URL
188
+ * 3. 默认使用环信 SDK 上传(需要传入 conn)
189
+ *
190
+ * @param options - 可选的自定义上传配置(覆盖初始化时的配置)
191
+ */
192
+ upload(options?: CustomUploadConfig): Promise<void>;
193
+ /**
194
+ * 实际执行上传的内部方法
195
+ */
196
+ private doUpload;
197
+ /**
198
+ * 上报 UUID 到服务器
199
+ * 使用与上传时一致的 token,避免 token 变化导致的不一致
200
+ */
201
+ private reportUUID;
202
+ /**
203
+ * 主动触发上传到自定义地址
204
+ * @param url - 上传地址
205
+ * @param headers - 请求头
206
+ */
207
+ uploadTo(url: string, headers?: Record<string, string>): Promise<void>;
208
+ /**
209
+ * 使用自定义处理器上传
210
+ * @param handler - 自定义上传处理器
211
+ */
212
+ uploadWithHandler(handler: CustomUploadHandler): Promise<void>;
213
+ destroy(): void;
214
+ }
215
+ export declare const logger: Logger;
216
+ export default logger;
package/dist/main.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Easemob UniApp Logger Plugin
3
+ *
4
+ * 一个适用于 uni-app 应用的高性能日志收集工具类库
5
+ * 支持传入 SDK 实例自动获取配置
6
+ *
7
+ * 使用示例:
8
+ * ```typescript
9
+ * import { logger } from 'easemob-uniapp-logger-plugin';
10
+ * import { conn } from 'easemob-websdk';
11
+ *
12
+ * // 方式1:传入 SDK 实例,自动获取配置
13
+ * logger.init({ conn });
14
+ *
15
+ * // 方式2:自定义上传
16
+ * logger.init({
17
+ * conn,
18
+ * customUpload: {
19
+ * url: 'https://your-server.com/upload',
20
+ * reportUrl: 'https://your-server.com/report'
21
+ * }
22
+ * });
23
+ *
24
+ * // 方式3:使用自定义 handler
25
+ * logger.init({
26
+ * customUpload: {
27
+ * handler: async (logContent) => {
28
+ * console.log('Upload logs:', logContent);
29
+ * }
30
+ * }
31
+ * });
32
+ * ```
33
+ */
34
+ export { logger, maskAppkey } from './lib/logger';
35
+ export type { SDKConnection, SDKLogData, SDKMessage, LogLevel, LogEntry, DeviceInfo, LoggerConfig, CustomUploadHandler, CustomUploadConfig, LoggerOptions } from './lib/logger';
36
+ export { logger as default } from './lib/logger';
@@ -0,0 +1,85 @@
1
+ /**
2
+ * UniApp 日志收集插件类型定义
3
+ */
4
+ /** SDK 连接实例接口 */
5
+ export interface SDKConnection {
6
+ /** API 地址 */
7
+ apiUrl?: string;
8
+ /** SDK 版本 */
9
+ version?: string;
10
+ /** 当前用户 */
11
+ user?: string;
12
+ /** 连接上下文 */
13
+ context?: {
14
+ /** 访问令牌 */
15
+ accessToken?: string;
16
+ /** AppKey */
17
+ appKey?: string;
18
+ };
19
+ /** 请求方法(用于兼容不同 SDK 版本) */
20
+ request?: (options: {
21
+ url: string;
22
+ data?: any;
23
+ method?: string;
24
+ headers?: Record<string, string>;
25
+ }) => Promise<any>;
26
+ }
27
+ /** 日志级别 */
28
+ export type LogLevel = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL';
29
+ /** 日志条目 */
30
+ export interface LogEntry {
31
+ level: LogLevel;
32
+ message: string;
33
+ timestamp: number;
34
+ data?: any;
35
+ }
36
+ /** 设备信息 */
37
+ export interface DeviceInfo {
38
+ /** 设备品牌 */
39
+ deviceBrand?: string;
40
+ /** 设备型号 */
41
+ deviceModel?: string;
42
+ /** 平台 */
43
+ platform?: string;
44
+ /** 系统版本 */
45
+ system?: string;
46
+ }
47
+ /** 日志配置 */
48
+ export interface LoggerConfig {
49
+ /** 日志文件过期天数,0表示不清理 */
50
+ expireDays: number;
51
+ /** 单个日志文件最大大小 (bytes),默认2MB */
52
+ maxFileSize: number;
53
+ /** 日志根目录名 */
54
+ rootDirectory: string;
55
+ /** 日志目录名 */
56
+ directory: string;
57
+ /** 日志文件名 */
58
+ fileName: string;
59
+ /** 批量写入间隔 (ms) */
60
+ flushInterval: number;
61
+ /** 批量写入数量阈值 */
62
+ batchSize: number;
63
+ }
64
+ /** 自定义上传处理器 */
65
+ export type CustomUploadHandler = (logContent: string) => Promise<void> | void;
66
+ /** 自定义上传配置 */
67
+ export interface CustomUploadConfig {
68
+ /** 自定义上传 URL(如果不传,使用环信默认上传) */
69
+ url?: string;
70
+ /** 自定义上报 URL(如果不传,使用环信默认上报) */
71
+ reportUrl?: string;
72
+ /** 自定义请求头 */
73
+ headers?: Record<string, string>;
74
+ /** 自定义上传处理器(优先级高于 URL) */
75
+ handler?: CustomUploadHandler;
76
+ }
77
+ /** Logger 选项 */
78
+ export interface LoggerOptions {
79
+ /** SDK 连接实例(传入后自动从中获取 token/user/appKey 等) */
80
+ conn?: SDKConnection;
81
+ /** 日志配置 */
82
+ log?: Partial<LoggerConfig>;
83
+ /** 自定义上传配置(不传则使用环信默认上传) */
84
+ customUpload?: CustomUploadConfig;
85
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "easemob-uniapp-logger-plugin",
3
+ "private": false,
4
+ "version": "1.4.4",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "build": "vite build && npm run build:types && npm run build:copy",
18
+ "build:types": "tsc --declaration --emitDeclarationOnly --outDir dist",
19
+ "build:copy": "cp dist/index.js dist/easemob-uniapp-logger.esm.js",
20
+ "preview": "vite preview",
21
+ "type-check": "tsc"
22
+ },
23
+ "keywords": [
24
+ "uniapp",
25
+ "logger",
26
+ "easemob",
27
+ "log",
28
+ "plugin"
29
+ ],
30
+ "description": "A logger plugin for uniapp applications",
31
+ "author": "",
32
+ "license": "MIT",
33
+ "files": [
34
+ "dist",
35
+ "README.md",
36
+ "CHANGELOG.md",
37
+ "LICENSE"
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/Easemob-Community/easemob-uniapp-logger-plugin.git"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/Easemob-Community/easemob-uniapp-logger-plugin/issues"
45
+ },
46
+ "homepage": "https://github.com/Easemob-Community/easemob-uniapp-logger-plugin#readme",
47
+ "devDependencies": {
48
+ "@dcloudio/types": "^3.4.28",
49
+ "javascript-obfuscator": "^5.3.0",
50
+ "rollup-plugin-obfuscator": "^1.1.0",
51
+ "typescript": "~5.9.3",
52
+ "vite": "^5.2.0",
53
+ "vite-plugin-dts": "^3.9.1"
54
+ }
55
+ }