@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/LICENSE +21 -0
- package/README.md +501 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +14 -0
- package/lib/index.js.map +1 -0
- package/lib/logger.d.ts +273 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/logger.js +590 -0
- package/lib/logger.js.map +1 -0
- package/package.json +45 -0
package/lib/logger.d.ts
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { WriteStream } from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* 日志级别枚举
|
|
4
|
+
*/
|
|
5
|
+
export declare enum LogLevel {
|
|
6
|
+
DEBUG = 0,
|
|
7
|
+
INFO = 1,
|
|
8
|
+
WARN = 2,
|
|
9
|
+
ERROR = 3,
|
|
10
|
+
SILENT = 4
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 日志级别名称映射
|
|
14
|
+
*/
|
|
15
|
+
export declare const LOG_LEVEL_NAMES: Record<LogLevel, string>;
|
|
16
|
+
/**
|
|
17
|
+
* 日志级别颜色映射
|
|
18
|
+
*/
|
|
19
|
+
export declare const LOG_LEVEL_COLORS: Record<LogLevel, (text: string) => string>;
|
|
20
|
+
/**
|
|
21
|
+
* 日志条目接口
|
|
22
|
+
*/
|
|
23
|
+
export interface LogEntry {
|
|
24
|
+
level: LogLevel;
|
|
25
|
+
name: string;
|
|
26
|
+
message: string;
|
|
27
|
+
timestamp: Date;
|
|
28
|
+
args: any[];
|
|
29
|
+
error?: Error;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 日志格式化器接口
|
|
33
|
+
*/
|
|
34
|
+
export interface LogFormatter {
|
|
35
|
+
format(entry: LogEntry): string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 日志输出器接口
|
|
39
|
+
*/
|
|
40
|
+
export interface LogTransport {
|
|
41
|
+
write(formatted: string): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Transport安全选项
|
|
45
|
+
*/
|
|
46
|
+
export interface TransportSecurityOptions {
|
|
47
|
+
/** 是否移除ANSI转义序列 */
|
|
48
|
+
removeAnsi?: boolean;
|
|
49
|
+
/** 是否脱敏敏感信息 */
|
|
50
|
+
maskSensitive?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 颜色函数类型
|
|
54
|
+
*/
|
|
55
|
+
export type ColorFunction = (text: string) => string;
|
|
56
|
+
/**
|
|
57
|
+
* Logger 颜色配置选项
|
|
58
|
+
*/
|
|
59
|
+
export interface LoggerColorOptions {
|
|
60
|
+
/** 日志级别颜色映射(覆盖默认级别颜色) */
|
|
61
|
+
levelColors?: Partial<Record<LogLevel, ColorFunction>>;
|
|
62
|
+
/** Logger名称颜色(可以是单个颜色或颜色数组) */
|
|
63
|
+
nameColor?: ColorFunction | ColorFunction[];
|
|
64
|
+
/** 日期时间颜色 */
|
|
65
|
+
dateColor?: ColorFunction;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Logger 配置选项
|
|
69
|
+
*/
|
|
70
|
+
export interface LoggerOptions {
|
|
71
|
+
/** 日志级别 */
|
|
72
|
+
level?: LogLevel;
|
|
73
|
+
/** 自定义格式化器 */
|
|
74
|
+
formatter?: LogFormatter;
|
|
75
|
+
/** 输出器列表 */
|
|
76
|
+
transports?: LogTransport[];
|
|
77
|
+
/** 颜色配置 */
|
|
78
|
+
colors?: LoggerColorOptions;
|
|
79
|
+
/** 性能选项 */
|
|
80
|
+
performance?: {
|
|
81
|
+
/** 最大子Logger数量(默认1000) */
|
|
82
|
+
maxChildLoggers?: number;
|
|
83
|
+
/** 最大Timer数量(默认100) */
|
|
84
|
+
maxTimers?: number;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 默认格式化器 - 【date】【level】【name】:【message】
|
|
89
|
+
* 只负责格式化,不处理安全净化(由Transport处理)
|
|
90
|
+
*/
|
|
91
|
+
export declare class DefaultFormatter implements LogFormatter {
|
|
92
|
+
private nameColorMap;
|
|
93
|
+
private colorIndex;
|
|
94
|
+
private readonly maxCacheSize;
|
|
95
|
+
private levelColors;
|
|
96
|
+
private nameColors;
|
|
97
|
+
private dateColor;
|
|
98
|
+
constructor(colorOptions?: LoggerColorOptions);
|
|
99
|
+
private getNameColor;
|
|
100
|
+
format(entry: LogEntry): string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 控制台输出器 - 开发友好,默认保留颜色和完整信息
|
|
104
|
+
*/
|
|
105
|
+
export declare class ConsoleTransport implements LogTransport {
|
|
106
|
+
private securityOptions?;
|
|
107
|
+
constructor(securityOptions?: TransportSecurityOptions | undefined);
|
|
108
|
+
write(formatted: string): void;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 文件输出器 - 生产安全,默认去除颜色和脱敏
|
|
112
|
+
*/
|
|
113
|
+
export declare class FileTransport implements LogTransport {
|
|
114
|
+
private stream;
|
|
115
|
+
private securityOptions?;
|
|
116
|
+
constructor(stream: WriteStream, securityOptions?: TransportSecurityOptions | undefined);
|
|
117
|
+
write(formatted: string): void;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 流输出器 - 可配置安全选项
|
|
121
|
+
*/
|
|
122
|
+
export declare class StreamTransport implements LogTransport {
|
|
123
|
+
private stream;
|
|
124
|
+
private securityOptions?;
|
|
125
|
+
constructor(stream: NodeJS.WritableStream, securityOptions?: TransportSecurityOptions | undefined);
|
|
126
|
+
write(formatted: string): void;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 性能计时器
|
|
130
|
+
*/
|
|
131
|
+
export interface Timer {
|
|
132
|
+
end(): void;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Logger 类 - 自管理子 Logger
|
|
136
|
+
*/
|
|
137
|
+
export declare class Logger {
|
|
138
|
+
#private;
|
|
139
|
+
private level;
|
|
140
|
+
private formatter;
|
|
141
|
+
private transports;
|
|
142
|
+
private timers;
|
|
143
|
+
private childLoggers;
|
|
144
|
+
private readonly maxChildLoggers;
|
|
145
|
+
private readonly maxTimers;
|
|
146
|
+
constructor(parent: Logger | null, name: string, options?: LoggerOptions);
|
|
147
|
+
get name(): string;
|
|
148
|
+
set name(name: string);
|
|
149
|
+
/**
|
|
150
|
+
* 设置日志级别
|
|
151
|
+
* @param level
|
|
152
|
+
* @param recursive 是否同时设置所有子 Logger 的级别
|
|
153
|
+
*/
|
|
154
|
+
setLevel(level: LogLevel, recursive?: boolean): void;
|
|
155
|
+
/**
|
|
156
|
+
* 递归设置级别,带深度检查
|
|
157
|
+
*/
|
|
158
|
+
private setLevelRecursive;
|
|
159
|
+
/**
|
|
160
|
+
* 获取当前日志级别
|
|
161
|
+
*/
|
|
162
|
+
getLevel(): LogLevel;
|
|
163
|
+
/**
|
|
164
|
+
* 检查指定级别是否启用
|
|
165
|
+
*/
|
|
166
|
+
isLevelEnabled(level: LogLevel): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* 添加输出器
|
|
169
|
+
* @param transport
|
|
170
|
+
* @param recursive 是否同时添加到所有子 Logger
|
|
171
|
+
*/
|
|
172
|
+
addTransport(transport: LogTransport, recursive?: boolean): void;
|
|
173
|
+
/**
|
|
174
|
+
* 移除输出器
|
|
175
|
+
* @param transport
|
|
176
|
+
* @param recursive 是否同时从所有子 Logger 移除
|
|
177
|
+
*/
|
|
178
|
+
removeTransport(transport: LogTransport, recursive?: boolean): void;
|
|
179
|
+
/**
|
|
180
|
+
* 设置格式化器
|
|
181
|
+
* @param formatter
|
|
182
|
+
* @param recursive 是否同时设置所有子 Logger 的格式化器
|
|
183
|
+
*/
|
|
184
|
+
setFormatter(formatter: LogFormatter, recursive?: boolean): void;
|
|
185
|
+
hasLogger(name: string): boolean;
|
|
186
|
+
/**
|
|
187
|
+
* 获取或创建子 Logger
|
|
188
|
+
* @param namespace 子命名空间
|
|
189
|
+
* @param options 可选配置,会覆盖从父级继承的配置
|
|
190
|
+
*/
|
|
191
|
+
getLogger(namespace: string, options?: LoggerOptions): Logger;
|
|
192
|
+
/**
|
|
193
|
+
* 检查并清理过多的子Logger
|
|
194
|
+
*/
|
|
195
|
+
private checkChildLoggerLimit;
|
|
196
|
+
setLogger(name: string, options?: LoggerOptions): Logger;
|
|
197
|
+
setOptions(options?: LoggerOptions): void;
|
|
198
|
+
/**
|
|
199
|
+
* 移除子 Logger
|
|
200
|
+
*/
|
|
201
|
+
removeLogger(namespace: string): boolean;
|
|
202
|
+
/**
|
|
203
|
+
* 获取所有子 Logger 名称
|
|
204
|
+
*/
|
|
205
|
+
getLoggerNames(): string[];
|
|
206
|
+
get parent(): Logger | null;
|
|
207
|
+
/**
|
|
208
|
+
* 检查是否为根 Logger
|
|
209
|
+
*/
|
|
210
|
+
isRoot(): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* 记录日志的通用方法
|
|
213
|
+
*/
|
|
214
|
+
private log;
|
|
215
|
+
/**
|
|
216
|
+
* DEBUG 级别日志
|
|
217
|
+
*/
|
|
218
|
+
debug(message: string, ...args: any[]): void;
|
|
219
|
+
/**
|
|
220
|
+
* INFO 级别日志
|
|
221
|
+
*/
|
|
222
|
+
info(message: string, ...args: any[]): void;
|
|
223
|
+
/**
|
|
224
|
+
* SUCCESS 日志(INFO 级别,带绿色 ✓ 标记)
|
|
225
|
+
*/
|
|
226
|
+
success(message: string, ...args: any[]): void;
|
|
227
|
+
/**
|
|
228
|
+
* WARN 级别日志
|
|
229
|
+
*/
|
|
230
|
+
warn(message: string, ...args: any[]): void;
|
|
231
|
+
/**
|
|
232
|
+
* ERROR 级别日志
|
|
233
|
+
* 支持传入Error对象,会自动打印错误堆栈信息
|
|
234
|
+
* @param message 错误消息
|
|
235
|
+
* @param args 其他参数,如果第一个参数是Error对象,会使用其message并打印堆栈
|
|
236
|
+
*/
|
|
237
|
+
error(message: string, ...args: any[]): void;
|
|
238
|
+
/**
|
|
239
|
+
* 开始性能计时
|
|
240
|
+
*/
|
|
241
|
+
time(label: string): Timer;
|
|
242
|
+
/**
|
|
243
|
+
* 清理过期的Timer
|
|
244
|
+
*/
|
|
245
|
+
private cleanupTimers;
|
|
246
|
+
/**
|
|
247
|
+
* 结束性能计时
|
|
248
|
+
*/
|
|
249
|
+
timeEnd(label: string): void;
|
|
250
|
+
/**
|
|
251
|
+
* 条件日志
|
|
252
|
+
*/
|
|
253
|
+
logIf(condition: boolean, level: LogLevel, message: string, ...args: any[]): void;
|
|
254
|
+
/**
|
|
255
|
+
* 获取 logger 名称
|
|
256
|
+
*/
|
|
257
|
+
getName(): string;
|
|
258
|
+
}
|
|
259
|
+
declare const defaultLogger: Logger;
|
|
260
|
+
export declare function getLogger(name: string, options?: LoggerOptions, parent?: Logger): Logger;
|
|
261
|
+
export declare function setLogger(name: string, options?: LoggerOptions, parent?: Logger): Logger;
|
|
262
|
+
export declare function setOptions(options?: LoggerOptions, logger?: Logger): void;
|
|
263
|
+
export declare function addTransport(transport: LogTransport, logger?: Logger): void;
|
|
264
|
+
export declare function removeTransport(transport: LogTransport, logger?: Logger): void;
|
|
265
|
+
export declare function setFormatter(formatter: LogFormatter, logger?: Logger): void;
|
|
266
|
+
export declare function setLevel(level: LogLevel, logger?: Logger): void;
|
|
267
|
+
export declare function getLevel(logger?: Logger): LogLevel;
|
|
268
|
+
export declare function isLevelEnabled(level: LogLevel, logger?: Logger): boolean;
|
|
269
|
+
export declare function setName(name: string, logger?: Logger): string;
|
|
270
|
+
export declare function getName(logger?: Logger): string;
|
|
271
|
+
export declare function getLoggerNames(logger?: Logger): string[];
|
|
272
|
+
export default defaultLogger;
|
|
273
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|