@zhin.js/logger 0.1.0

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.
package/lib/logger.js ADDED
@@ -0,0 +1,590 @@
1
+ import chalk from 'chalk';
2
+ import { performance } from 'node:perf_hooks';
3
+ import { format } from 'node:util';
4
+ /**
5
+ * 日志级别枚举
6
+ */
7
+ export var LogLevel;
8
+ (function (LogLevel) {
9
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
10
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
11
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
12
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
13
+ LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
14
+ })(LogLevel || (LogLevel = {}));
15
+ /**
16
+ * 日志级别名称映射
17
+ */
18
+ export const LOG_LEVEL_NAMES = {
19
+ [LogLevel.DEBUG]: 'DEBUG',
20
+ [LogLevel.INFO]: 'INFO',
21
+ [LogLevel.WARN]: 'WARN',
22
+ [LogLevel.ERROR]: 'ERROR',
23
+ [LogLevel.SILENT]: 'SILENT'
24
+ };
25
+ /**
26
+ * 日志级别颜色映射
27
+ */
28
+ export const LOG_LEVEL_COLORS = {
29
+ [LogLevel.DEBUG]: chalk.gray,
30
+ [LogLevel.INFO]: chalk.blue,
31
+ [LogLevel.WARN]: chalk.yellow,
32
+ [LogLevel.ERROR]: chalk.red,
33
+ [LogLevel.SILENT]: chalk.gray
34
+ };
35
+ /**
36
+ * Logger 名称颜色映射(循环使用)
37
+ */
38
+ const NAME_COLORS = [
39
+ chalk.cyan,
40
+ chalk.magenta,
41
+ chalk.green,
42
+ chalk.yellow,
43
+ chalk.blue,
44
+ chalk.red
45
+ ];
46
+ /**
47
+ * 安全工具类
48
+ */
49
+ class LogSanitizer {
50
+ static ANSI_REGEX = /\x1b\[[0-9;]*[mGKHF]/g;
51
+ static SENSITIVE_PATTERNS = [
52
+ /password['\s]*[:=]['\s]*([^'\s,}]+)/gi,
53
+ /token['\s]*[:=]['\s]*([^'\s,}]+)/gi,
54
+ /key['\s]*[:=]['\s]*([^'\s,}]+)/gi,
55
+ /secret['\s]*[:=]['\s]*([^'\s,}]+)/gi,
56
+ /apikey['\s]*[:=]['\s]*([^'\s,}]+)/gi
57
+ ];
58
+ /**
59
+ * 移除ANSI转义序列
60
+ */
61
+ static removeAnsi(message) {
62
+ return message.replace(this.ANSI_REGEX, '');
63
+ }
64
+ /**
65
+ * 脱敏敏感信息
66
+ */
67
+ static maskSensitive(message) {
68
+ let sanitized = message;
69
+ for (const pattern of this.SENSITIVE_PATTERNS) {
70
+ sanitized = sanitized.replace(pattern, (match, value) => {
71
+ const masked = value.length > 4
72
+ ? value.substring(0, 2) + '*'.repeat(value.length - 4) + value.substring(value.length - 2)
73
+ : '*'.repeat(value.length);
74
+ return match.replace(value, masked);
75
+ });
76
+ }
77
+ return sanitized;
78
+ }
79
+ }
80
+ /**
81
+ * 默认格式化器 - 【date】【level】【name】:【message】
82
+ * 只负责格式化,不处理安全净化(由Transport处理)
83
+ */
84
+ export class DefaultFormatter {
85
+ nameColorMap = new Map();
86
+ colorIndex = 0;
87
+ maxCacheSize = 1000;
88
+ // 可自定义的颜色配置
89
+ levelColors;
90
+ nameColors;
91
+ dateColor;
92
+ constructor(colorOptions) {
93
+ // 初始化级别颜色(可覆盖默认值)
94
+ this.levelColors = {
95
+ ...LOG_LEVEL_COLORS,
96
+ ...colorOptions?.levelColors
97
+ };
98
+ // 初始化名称颜色(可自定义)
99
+ if (colorOptions?.nameColor) {
100
+ this.nameColors = Array.isArray(colorOptions.nameColor)
101
+ ? colorOptions.nameColor
102
+ : [colorOptions.nameColor];
103
+ }
104
+ else {
105
+ this.nameColors = NAME_COLORS;
106
+ }
107
+ // 初始化日期颜色
108
+ this.dateColor = colorOptions?.dateColor ?? chalk.gray;
109
+ }
110
+ getNameColor(name) {
111
+ if (!this.nameColorMap.has(name)) {
112
+ // 防止缓存无限增长
113
+ if (this.nameColorMap.size >= this.maxCacheSize) {
114
+ const entries = Array.from(this.nameColorMap.entries());
115
+ this.nameColorMap.clear();
116
+ // 保留最新的500个
117
+ for (const [key, value] of entries.slice(-500)) {
118
+ this.nameColorMap.set(key, value);
119
+ }
120
+ }
121
+ this.nameColorMap.set(name, this.nameColors[this.colorIndex % this.nameColors.length]);
122
+ this.colorIndex++;
123
+ }
124
+ return this.nameColorMap.get(name);
125
+ }
126
+ format(entry) {
127
+ const { level, name, message, timestamp, error } = entry;
128
+ // 格式化时间:MM-dd HH:MM:ss.SSS(使用自定义颜色)
129
+ const date = timestamp.toISOString().slice(5, 23).replace('T', ' ');
130
+ const dateStr = this.dateColor(`[${date}]`);
131
+ // 格式化级别(使用自定义颜色)
132
+ const levelName = LOG_LEVEL_NAMES[level];
133
+ const levelStr = this.levelColors[level](`[${levelName}]`);
134
+ // 格式化名称(使用自定义颜色)
135
+ const nameColor = this.getNameColor(name);
136
+ const nameStr = nameColor(`[${name}]`);
137
+ // 基础格式:【date】【level】【name】:【message】
138
+ let result = `${dateStr} ${levelStr} ${nameStr}: ${message}`;
139
+ // 如果是错误级别且有错误对象,添加堆栈信息
140
+ if (level === LogLevel.ERROR && error && error.stack) {
141
+ result += '\n' + this.levelColors[level](error.stack);
142
+ }
143
+ return result;
144
+ }
145
+ }
146
+ /**
147
+ * 控制台输出器 - 开发友好,默认保留颜色和完整信息
148
+ */
149
+ export class ConsoleTransport {
150
+ securityOptions;
151
+ constructor(securityOptions) {
152
+ this.securityOptions = securityOptions;
153
+ }
154
+ write(formatted) {
155
+ let output = formatted;
156
+ // 控制台输出的安全处理(默认不脱敏,便于开发调试)
157
+ const removeAnsi = this.securityOptions?.removeAnsi ?? false;
158
+ const maskSensitive = this.securityOptions?.maskSensitive ?? false;
159
+ if (removeAnsi) {
160
+ output = LogSanitizer.removeAnsi(output);
161
+ }
162
+ if (maskSensitive) {
163
+ output = LogSanitizer.maskSensitive(output);
164
+ }
165
+ // 直接使用 console.log,保持与 console.info 一致的行为
166
+ console.log(output);
167
+ }
168
+ }
169
+ /**
170
+ * 文件输出器 - 生产安全,默认去除颜色和脱敏
171
+ */
172
+ export class FileTransport {
173
+ stream;
174
+ securityOptions;
175
+ constructor(stream, securityOptions) {
176
+ this.stream = stream;
177
+ this.securityOptions = securityOptions;
178
+ }
179
+ write(formatted) {
180
+ let output = formatted;
181
+ // 文件输出的安全处理(默认脱敏,保护生产环境)
182
+ const removeAnsi = this.securityOptions?.removeAnsi ?? true; // 文件默认去掉颜色
183
+ const maskSensitive = this.securityOptions?.maskSensitive ?? true; // 文件默认脱敏
184
+ if (removeAnsi) {
185
+ output = LogSanitizer.removeAnsi(output);
186
+ }
187
+ if (maskSensitive) {
188
+ output = LogSanitizer.maskSensitive(output);
189
+ }
190
+ this.stream.write(output + '\n');
191
+ }
192
+ }
193
+ /**
194
+ * 流输出器 - 可配置安全选项
195
+ */
196
+ export class StreamTransport {
197
+ stream;
198
+ securityOptions;
199
+ constructor(stream, securityOptions) {
200
+ this.stream = stream;
201
+ this.securityOptions = securityOptions;
202
+ }
203
+ write(formatted) {
204
+ let output = formatted;
205
+ // 流输出的安全处理(可配置)
206
+ const removeAnsi = this.securityOptions?.removeAnsi ?? false;
207
+ const maskSensitive = this.securityOptions?.maskSensitive ?? false;
208
+ if (removeAnsi) {
209
+ output = LogSanitizer.removeAnsi(output);
210
+ }
211
+ if (maskSensitive) {
212
+ output = LogSanitizer.maskSensitive(output);
213
+ }
214
+ this.stream.write(output + '\n');
215
+ }
216
+ }
217
+ /**
218
+ * Logger 类 - 自管理子 Logger
219
+ */
220
+ export class Logger {
221
+ level = LogLevel.INFO;
222
+ formatter = new DefaultFormatter();
223
+ transports = [new ConsoleTransport()];
224
+ timers = new Map();
225
+ childLoggers = new Map();
226
+ #parent;
227
+ #name;
228
+ // 🔧 性能配置
229
+ maxChildLoggers;
230
+ maxTimers;
231
+ constructor(parent, name, options = {}) {
232
+ this.#name = name;
233
+ this.#parent = parent;
234
+ // 初始化性能配置
235
+ this.maxChildLoggers = options.performance?.maxChildLoggers ?? 1000;
236
+ this.maxTimers = options.performance?.maxTimers ?? 100;
237
+ this.setOptions(options);
238
+ }
239
+ get name() {
240
+ return this.#name;
241
+ }
242
+ set name(name) {
243
+ this.#name = name;
244
+ }
245
+ /**
246
+ * 设置日志级别
247
+ * @param level
248
+ * @param recursive 是否同时设置所有子 Logger 的级别
249
+ */
250
+ setLevel(level, recursive = false) {
251
+ this.level = level;
252
+ if (recursive) {
253
+ // 🔧 防止递归过深
254
+ const maxDepth = 50;
255
+ this.setLevelRecursive(level, 0, maxDepth);
256
+ }
257
+ }
258
+ /**
259
+ * 递归设置级别,带深度检查
260
+ */
261
+ setLevelRecursive(level, currentDepth, maxDepth) {
262
+ if (currentDepth >= maxDepth) {
263
+ console.warn(`[Logger] 递归深度超过${maxDepth},停止递归设置`);
264
+ return;
265
+ }
266
+ for (const childLogger of this.childLoggers.values()) {
267
+ childLogger.level = level;
268
+ childLogger.setLevelRecursive(level, currentDepth + 1, maxDepth);
269
+ }
270
+ }
271
+ /**
272
+ * 获取当前日志级别
273
+ */
274
+ getLevel() {
275
+ return this.level;
276
+ }
277
+ /**
278
+ * 检查指定级别是否启用
279
+ */
280
+ isLevelEnabled(level) {
281
+ return level >= this.level;
282
+ }
283
+ /**
284
+ * 添加输出器
285
+ * @param transport
286
+ * @param recursive 是否同时添加到所有子 Logger
287
+ */
288
+ addTransport(transport, recursive = false) {
289
+ this.transports.push(transport);
290
+ if (recursive) {
291
+ for (const childLogger of this.childLoggers.values()) {
292
+ childLogger.addTransport(transport, recursive);
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * 移除输出器
298
+ * @param transport
299
+ * @param recursive 是否同时从所有子 Logger 移除
300
+ */
301
+ removeTransport(transport, recursive = false) {
302
+ const index = this.transports.indexOf(transport);
303
+ if (index > -1) {
304
+ this.transports.splice(index, 1);
305
+ }
306
+ if (recursive) {
307
+ for (const childLogger of this.childLoggers.values()) {
308
+ childLogger.removeTransport(transport, recursive);
309
+ }
310
+ }
311
+ }
312
+ /**
313
+ * 设置格式化器
314
+ * @param formatter
315
+ * @param recursive 是否同时设置所有子 Logger 的格式化器
316
+ */
317
+ setFormatter(formatter, recursive = false) {
318
+ this.formatter = formatter;
319
+ if (recursive) {
320
+ for (const childLogger of this.childLoggers.values()) {
321
+ childLogger.setFormatter(formatter, recursive);
322
+ }
323
+ }
324
+ }
325
+ hasLogger(name) {
326
+ return this.childLoggers.has(name);
327
+ }
328
+ /**
329
+ * 获取或创建子 Logger
330
+ * @param namespace 子命名空间
331
+ * @param options 可选配置,会覆盖从父级继承的配置
332
+ */
333
+ getLogger(namespace, options) {
334
+ // 🔧 内存管理:检查子Logger数量
335
+ this.checkChildLoggerLimit();
336
+ if (!this.childLoggers.has(namespace)) {
337
+ const childName = `${this.name}:${namespace}`;
338
+ const childLogger = new Logger(this, childName, options ?? {});
339
+ this.childLoggers.set(namespace, childLogger);
340
+ }
341
+ return this.childLoggers.get(namespace);
342
+ }
343
+ /**
344
+ * 检查并清理过多的子Logger
345
+ */
346
+ checkChildLoggerLimit() {
347
+ if (this.childLoggers.size >= this.maxChildLoggers) {
348
+ const entries = Array.from(this.childLoggers.entries());
349
+ const toRemove = Math.floor(this.maxChildLoggers * 0.1); // 移除10%
350
+ for (let i = 0; i < toRemove; i++) {
351
+ const [key] = entries[i];
352
+ this.childLoggers.delete(key);
353
+ }
354
+ console.warn(`[Logger] 清理了${toRemove}个子Logger,当前数量: ${this.childLoggers.size}`);
355
+ }
356
+ }
357
+ setLogger(name, options) {
358
+ if (this.childLoggers.has(name)) {
359
+ this.childLoggers.get(name).setOptions(options);
360
+ }
361
+ else {
362
+ const childLogger = new Logger(this, name, options ?? {});
363
+ this.childLoggers.set(name, childLogger);
364
+ }
365
+ return this.childLoggers.get(name);
366
+ }
367
+ setOptions(options = {}) {
368
+ // 如果有父 Logger,默认继承父级配置,然后应用自定义选项
369
+ if (this.#parent) {
370
+ this.level = options.level ?? this.#parent?.level ?? LogLevel.INFO;
371
+ this.formatter = options.formatter ?? this.#parent?.formatter ?? new DefaultFormatter(options.colors);
372
+ this.transports = options.transports ?? [...this.#parent?.transports ?? []];
373
+ }
374
+ else {
375
+ this.level = options.level ?? LogLevel.INFO;
376
+ this.formatter = options.formatter ?? new DefaultFormatter(options.colors);
377
+ this.transports = options.transports ?? [new ConsoleTransport()];
378
+ }
379
+ }
380
+ /**
381
+ * 移除子 Logger
382
+ */
383
+ removeLogger(namespace) {
384
+ return this.childLoggers.delete(namespace);
385
+ }
386
+ /**
387
+ * 获取所有子 Logger 名称
388
+ */
389
+ getLoggerNames() {
390
+ return Array.from(this.childLoggers.keys());
391
+ }
392
+ get parent() {
393
+ return this.#parent;
394
+ }
395
+ /**
396
+ * 检查是否为根 Logger
397
+ */
398
+ isRoot() {
399
+ return !this.#parent;
400
+ }
401
+ /**
402
+ * 记录日志的通用方法
403
+ */
404
+ log(level, message, ...args) {
405
+ if (!this.isLevelEnabled(level)) {
406
+ return;
407
+ }
408
+ // 检查是否有Error对象
409
+ let error;
410
+ if (level === LogLevel.ERROR) {
411
+ // 在参数中查找Error对象
412
+ error = args.find(arg => arg instanceof Error);
413
+ // 如果第一个参数是Error对象,使用其message作为主要消息
414
+ if (args[0] instanceof Error) {
415
+ const err = args[0];
416
+ message = err.message || message;
417
+ error = err;
418
+ args = args.slice(1); // 移除Error对象,避免重复显示
419
+ }
420
+ }
421
+ // 处理参数格式化,与 console.info 行为一致
422
+ const formattedMessage = args.length > 0 ? format(message, ...args) : message;
423
+ const entry = {
424
+ level,
425
+ name: this.name,
426
+ message: formattedMessage,
427
+ timestamp: new Date(),
428
+ args,
429
+ error
430
+ };
431
+ const formatted = this.formatter.format(entry);
432
+ // 输出到所有 transport
433
+ for (const transport of this.transports) {
434
+ try {
435
+ transport.write(formatted);
436
+ }
437
+ catch (err) {
438
+ // 避免日志系统本身的错误导致应用崩溃
439
+ console.error('Logger transport error:', err);
440
+ }
441
+ }
442
+ }
443
+ /**
444
+ * DEBUG 级别日志
445
+ */
446
+ debug(message, ...args) {
447
+ this.log(LogLevel.DEBUG, message, ...args);
448
+ }
449
+ /**
450
+ * INFO 级别日志
451
+ */
452
+ info(message, ...args) {
453
+ this.log(LogLevel.INFO, message, ...args);
454
+ }
455
+ /**
456
+ * SUCCESS 日志(INFO 级别,带绿色 ✓ 标记)
457
+ */
458
+ success(message, ...args) {
459
+ const successMessage = chalk.green('✓ ') + message;
460
+ this.log(LogLevel.INFO, successMessage, ...args);
461
+ }
462
+ /**
463
+ * WARN 级别日志
464
+ */
465
+ warn(message, ...args) {
466
+ this.log(LogLevel.WARN, message, ...args);
467
+ }
468
+ /**
469
+ * ERROR 级别日志
470
+ * 支持传入Error对象,会自动打印错误堆栈信息
471
+ * @param message 错误消息
472
+ * @param args 其他参数,如果第一个参数是Error对象,会使用其message并打印堆栈
473
+ */
474
+ error(message, ...args) {
475
+ this.log(LogLevel.ERROR, message, ...args);
476
+ }
477
+ /**
478
+ * 开始性能计时
479
+ */
480
+ time(label) {
481
+ // 🔧 清理过期的timer
482
+ this.cleanupTimers();
483
+ const startTime = performance.now();
484
+ this.timers.set(label, startTime);
485
+ return {
486
+ end: () => {
487
+ const endTime = performance.now();
488
+ const duration = endTime - startTime;
489
+ this.timers.delete(label);
490
+ this.info(`${label} took ${duration.toFixed(2)}ms`);
491
+ }
492
+ };
493
+ }
494
+ /**
495
+ * 清理过期的Timer
496
+ */
497
+ cleanupTimers() {
498
+ if (this.timers.size >= this.maxTimers) {
499
+ const now = performance.now();
500
+ const fiveMinutes = 5 * 60 * 1000; // 5分钟
501
+ let cleaned = 0;
502
+ for (const [label, startTime] of this.timers.entries()) {
503
+ if (now - startTime > fiveMinutes) {
504
+ this.timers.delete(label);
505
+ cleaned++;
506
+ }
507
+ }
508
+ // 如果还是太多,清理最老的一批
509
+ if (this.timers.size >= this.maxTimers) {
510
+ const entries = Array.from(this.timers.entries());
511
+ const toRemove = Math.floor(this.maxTimers * 0.2); // 移除20%
512
+ for (let i = 0; i < toRemove && i < entries.length; i++) {
513
+ const [label] = entries[i];
514
+ this.timers.delete(label);
515
+ cleaned++;
516
+ }
517
+ }
518
+ if (cleaned > 0) {
519
+ console.warn(`[Logger] 清理了${cleaned}个过期Timer,当前数量: ${this.timers.size}`);
520
+ }
521
+ }
522
+ }
523
+ /**
524
+ * 结束性能计时
525
+ */
526
+ timeEnd(label) {
527
+ const startTime = this.timers.get(label);
528
+ if (startTime) {
529
+ const duration = performance.now() - startTime;
530
+ this.timers.delete(label);
531
+ this.info(`${label} took ${duration.toFixed(2)}ms`);
532
+ }
533
+ else {
534
+ this.warn(`Timer '${label}' does not exist`);
535
+ }
536
+ }
537
+ /**
538
+ * 条件日志
539
+ */
540
+ logIf(condition, level, message, ...args) {
541
+ if (condition) {
542
+ this.log(level, message, ...args);
543
+ }
544
+ }
545
+ /**
546
+ * 获取 logger 名称
547
+ */
548
+ getName() {
549
+ return this.name;
550
+ }
551
+ }
552
+ const defaultLogger = new Logger(null, 'Zhin');
553
+ export function getLogger(name, options = {}, parent = defaultLogger) {
554
+ return parent.getLogger(name, options);
555
+ }
556
+ export function setLogger(name, options, parent = defaultLogger) {
557
+ return parent.setLogger(name, options);
558
+ }
559
+ export function setOptions(options = {}, logger = defaultLogger) {
560
+ return logger.setOptions(options);
561
+ }
562
+ export function addTransport(transport, logger = defaultLogger) {
563
+ return logger.addTransport(transport);
564
+ }
565
+ export function removeTransport(transport, logger = defaultLogger) {
566
+ return logger.removeTransport(transport);
567
+ }
568
+ export function setFormatter(formatter, logger = defaultLogger) {
569
+ return logger.setFormatter(formatter);
570
+ }
571
+ export function setLevel(level, logger = defaultLogger) {
572
+ return logger.setLevel(level);
573
+ }
574
+ export function getLevel(logger = defaultLogger) {
575
+ return logger.getLevel();
576
+ }
577
+ export function isLevelEnabled(level, logger = defaultLogger) {
578
+ return logger.isLevelEnabled(level);
579
+ }
580
+ export function setName(name, logger = defaultLogger) {
581
+ return logger.name = name;
582
+ }
583
+ export function getName(logger = defaultLogger) {
584
+ return logger.name;
585
+ }
586
+ export function getLoggerNames(logger = defaultLogger) {
587
+ return logger.getLoggerNames();
588
+ }
589
+ export default defaultLogger;
590
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@zhin.js/logger",
3
+ "version": "0.1.0",
4
+ "description": "Structured logging system for Zhin Bot Framework",
5
+ "main": "lib/index.js",
6
+ "type": "module",
7
+ "module": "lib/index.js",
8
+ "types": "lib/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./lib/index.d.ts",
12
+ "import": "./lib/index.js",
13
+ "default": "./lib/index.js"
14
+ }
15
+ },
16
+ "keywords": [
17
+ "zhin",
18
+ "bot",
19
+ "framework",
20
+ "logger",
21
+ "logging",
22
+ "structured"
23
+ ],
24
+ "author": "Zhin Team",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "chalk": "^5.6.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^24.3.0",
31
+ "typescript": "^5.7.2"
32
+ },
33
+ "files": [
34
+ "lib"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc",
41
+ "dev": "tsc --watch",
42
+ "test": "vitest",
43
+ "test:coverage": "vitest --coverage"
44
+ }
45
+ }