@mks2508/better-logger 2.1.0 → 3.0.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/.claude/settings.local.json +6 -1
- package/CHANGELOG.json +93 -1
- package/CHANGELOG.md +127 -0
- package/CLAUDE.md +14 -1
- package/README.md +111 -20
- package/dist/Logger.d.ts +205 -58
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +23 -276
- package/dist/ScopedLogger.d.ts.map +1 -1
- package/dist/chunks/Logger-BCfx_yCK.js +2 -0
- package/dist/chunks/Logger-BCfx_yCK.js.map +1 -0
- package/dist/chunks/{Logger-B7L-ujY4.js → Logger-C126NTrD.js} +862 -96
- package/dist/chunks/Logger-C126NTrD.js.map +1 -0
- package/dist/exports-module.d.ts +1 -1
- package/dist/exports-module.d.ts.map +1 -1
- package/dist/exports.cjs +1 -1
- package/dist/exports.js +1 -1
- package/dist/hooks/HookManager.d.ts +21 -0
- package/dist/hooks/HookManager.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +23 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +240 -9
- package/dist/index.js.map +1 -1
- package/dist/serializers/SerializerRegistry.d.ts +16 -0
- package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
- package/dist/serializers/index.d.ts +2 -0
- package/dist/serializers/index.d.ts.map +1 -0
- package/dist/styling/StyleCache.d.ts +42 -0
- package/dist/styling/StyleCache.d.ts.map +1 -0
- package/dist/styling-module.d.ts +1 -1
- package/dist/styling-module.d.ts.map +1 -1
- package/dist/styling.cjs +1 -1
- package/dist/styling.js +2 -2
- package/dist/transports/ConsoleTransport.d.ts +9 -0
- package/dist/transports/ConsoleTransport.d.ts.map +1 -0
- package/dist/transports/FileTransport.d.ts +15 -0
- package/dist/transports/FileTransport.d.ts.map +1 -0
- package/dist/transports/HttpTransport.d.ts +16 -0
- package/dist/transports/HttpTransport.d.ts.map +1 -0
- package/dist/transports/TransportManager.d.ts +14 -0
- package/dist/transports/TransportManager.d.ts.map +1 -0
- package/dist/transports/index.d.ts +5 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/types/core.d.ts +38 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +36 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/serializers.d.ts +25 -0
- package/dist/types/serializers.d.ts.map +1 -0
- package/dist/types/transports.d.ts +47 -0
- package/dist/types/transports.d.ts.map +1 -0
- package/docs/API.md +227 -0
- package/package.json +1 -1
- package/packages/core/package.json +1 -1
- package/src/Logger.ts +391 -102
- package/src/ScopedLogger.ts +78 -318
- package/src/hooks/HookManager.ts +177 -0
- package/src/hooks/index.ts +1 -0
- package/src/index.ts +77 -2
- package/src/serializers/SerializerRegistry.ts +173 -0
- package/src/serializers/index.ts +1 -0
- package/src/styling/StyleCache.ts +131 -0
- package/src/transports/ConsoleTransport.ts +28 -0
- package/src/transports/FileTransport.ts +53 -0
- package/src/transports/HttpTransport.ts +56 -0
- package/src/transports/TransportManager.ts +130 -0
- package/src/transports/index.ts +4 -0
- package/src/types/core.ts +46 -0
- package/src/types/hooks.ts +45 -0
- package/src/types/index.ts +39 -1
- package/src/types/serializers.ts +30 -0
- package/src/types/transports.ts +52 -0
- package/dist/chunks/Logger-B7L-ujY4.js.map +0 -1
- package/dist/chunks/Logger-DzU_c5sX.js +0 -2
- package/dist/chunks/Logger-DzU_c5sX.js.map +0 -1
- package/dist/chunks/ScopedLogger-BY3-E8Ov.js +0 -2
- package/dist/chunks/ScopedLogger-BY3-E8Ov.js.map +0 -1
- package/dist/chunks/ScopedLogger-D-RbiFZn.js +0 -361
- package/dist/chunks/ScopedLogger-D-RbiFZn.js.map +0 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { TransportManager } from './TransportManager.js';
|
|
2
|
+
export { ConsoleTransport } from './ConsoleTransport.js';
|
|
3
|
+
export { FileTransport, type FileTransportOptions } from './FileTransport.js';
|
|
4
|
+
export { HttpTransport, type HttpTransportOptions } from './HttpTransport.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/types/core.d.ts
CHANGED
|
@@ -231,4 +231,42 @@ export interface LogStyles {
|
|
|
231
231
|
backdrop?: string;
|
|
232
232
|
transparency?: number;
|
|
233
233
|
}
|
|
234
|
+
export interface TimerResult {
|
|
235
|
+
label: string;
|
|
236
|
+
duration: number;
|
|
237
|
+
startTime: number;
|
|
238
|
+
endTime: number;
|
|
239
|
+
}
|
|
240
|
+
export interface IScopedLogger {
|
|
241
|
+
debug(...args: any[]): void;
|
|
242
|
+
info(...args: any[]): void;
|
|
243
|
+
warn(...args: any[]): void;
|
|
244
|
+
error(...args: any[]): void;
|
|
245
|
+
success(...args: any[]): void;
|
|
246
|
+
critical(...args: any[]): void;
|
|
247
|
+
trace(...args: any[]): void;
|
|
248
|
+
badges(badges: string[]): this;
|
|
249
|
+
badge(badge: string): this;
|
|
250
|
+
clearBadges(): this;
|
|
251
|
+
time(label: string): void;
|
|
252
|
+
timeEnd(label: string): number | undefined;
|
|
253
|
+
style(presetName: string): this;
|
|
254
|
+
}
|
|
255
|
+
export interface IAPILogger extends IScopedLogger {
|
|
256
|
+
slow(message: string, duration?: number): void;
|
|
257
|
+
rateLimit(message: string): void;
|
|
258
|
+
auth(message: string): void;
|
|
259
|
+
deprecated(message: string): void;
|
|
260
|
+
}
|
|
261
|
+
export interface IComponentLogger extends IScopedLogger {
|
|
262
|
+
lifecycle(event: string, message?: string): void;
|
|
263
|
+
stateChange(from: string, to: string, data?: any): void;
|
|
264
|
+
propsChange(changes: Record<string, any>): void;
|
|
265
|
+
}
|
|
266
|
+
export interface Bindings {
|
|
267
|
+
scope?: string;
|
|
268
|
+
badges?: string[];
|
|
269
|
+
type?: 'scope' | 'api' | 'component';
|
|
270
|
+
context?: string[];
|
|
271
|
+
}
|
|
234
272
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/types/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { LogLevel, StackInfo } from './core.js';
|
|
2
|
+
export interface HookLogEntry {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
args: any[];
|
|
6
|
+
timestamp: string;
|
|
7
|
+
prefix?: string;
|
|
8
|
+
stackInfo?: StackInfo;
|
|
9
|
+
correlationId?: string;
|
|
10
|
+
context?: Record<string, any>;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
export type HookEvent = 'beforeLog' | 'afterLog' | 'onError';
|
|
14
|
+
export type HookCallback = (entry: HookLogEntry) => void | HookLogEntry | Promise<void | HookLogEntry>;
|
|
15
|
+
export type MiddlewareFn = (entry: HookLogEntry, next: () => void | Promise<void>) => void | Promise<void>;
|
|
16
|
+
export interface HookRegistration {
|
|
17
|
+
id: string;
|
|
18
|
+
event: HookEvent;
|
|
19
|
+
callback: HookCallback;
|
|
20
|
+
priority: number;
|
|
21
|
+
once: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface MiddlewareRegistration {
|
|
24
|
+
id: string;
|
|
25
|
+
fn: MiddlewareFn;
|
|
26
|
+
priority: number;
|
|
27
|
+
}
|
|
28
|
+
export interface IHookManager {
|
|
29
|
+
on(event: HookEvent, callback: HookCallback, priority?: number): () => void;
|
|
30
|
+
once(event: HookEvent, callback: HookCallback, priority?: number): () => void;
|
|
31
|
+
off(event: HookEvent, callback: HookCallback): boolean;
|
|
32
|
+
use(middleware: MiddlewareFn, priority?: number): () => void;
|
|
33
|
+
emit(event: HookEvent, entry: HookLogEntry): Promise<HookLogEntry>;
|
|
34
|
+
process(entry: HookLogEntry): Promise<HookLogEntry>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC;AAEvG,MAAM,MAAM,YAAY,GAAG,CACvB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAC/B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC5E,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC9E,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Type definitions exports for Advanced Logger
|
|
3
3
|
*/
|
|
4
|
-
export type { LogLevel, Verbosity, ThemeVariant, DevToolsTheme, BannerType, ExportFormat, OutputFormat, LoggerConfig, StackInfo, TimerEntry, StyleOptions, AdaptiveColors, SpacingType, LogLayout, LogPartConfig, LogStyles, } from './core.js';
|
|
4
|
+
export type { LogLevel, Verbosity, ThemeVariant, DevToolsTheme, BannerType, ExportFormat, OutputFormat, LoggerConfig, StackInfo, TimerEntry, TimerResult, StyleOptions, AdaptiveColors, SpacingType, LogLayout, LogPartConfig, LogStyles, IScopedLogger, IAPILogger, IComponentLogger, Bindings, } from './core.js';
|
|
5
5
|
export { LOG_LEVELS } from './core.js';
|
|
6
6
|
export type { LogMetadata, ILogHandler, LogEntry, ExportFilters, ExportOptions, ExportResult, BufferStats, } from './handlers.js';
|
|
7
|
+
export type { SerializerFn, SerializerContext, SerializerEntry, SerializerConfig, ISerializerRegistry, } from './serializers.js';
|
|
8
|
+
export type { HookLogEntry, HookEvent, HookCallback, MiddlewareFn, HookRegistration, MiddlewareRegistration, IHookManager, } from './hooks.js';
|
|
9
|
+
export type { TransportRecord, TransportOptions, TransportTarget, ITransport, IBufferedTransport, ITransportManager, } from './transports.js';
|
|
10
|
+
export type { StyleCacheConfig } from '../styling/StyleCache.js';
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,QAAQ,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,YAAY,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,GACd,MAAM,eAAe,CAAC;AAGvB,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type SerializerFn<T = any> = (value: T, context: SerializerContext) => any;
|
|
2
|
+
export interface SerializerContext {
|
|
3
|
+
depth: number;
|
|
4
|
+
maxDepth: number;
|
|
5
|
+
path: string[];
|
|
6
|
+
seen: WeakSet<object>;
|
|
7
|
+
}
|
|
8
|
+
export interface SerializerEntry<T = any> {
|
|
9
|
+
type: new (...args: any[]) => T;
|
|
10
|
+
serializer: SerializerFn<T>;
|
|
11
|
+
priority: number;
|
|
12
|
+
}
|
|
13
|
+
export interface SerializerConfig {
|
|
14
|
+
maxDepth?: number;
|
|
15
|
+
circular?: 'error' | 'skip' | 'placeholder';
|
|
16
|
+
preserveUndefined?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ISerializerRegistry {
|
|
19
|
+
add<T>(type: new (...args: any[]) => T, serializer: SerializerFn<T>, priority?: number): void;
|
|
20
|
+
remove<T>(type: new (...args: any[]) => T): boolean;
|
|
21
|
+
has<T>(type: new (...args: any[]) => T): boolean;
|
|
22
|
+
serialize(value: any, config?: SerializerConfig): any;
|
|
23
|
+
getAll(): SerializerEntry[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=serializers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../../src/types/serializers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,GAAG,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACpC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9F,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;IACpD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC;IACjD,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,GAAG,CAAC;IACtD,MAAM,IAAI,eAAe,EAAE,CAAC;CAC/B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { LogLevel } from './core.js';
|
|
2
|
+
export interface TransportRecord {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
levelValue: number;
|
|
5
|
+
time: number;
|
|
6
|
+
msg: string;
|
|
7
|
+
prefix?: string;
|
|
8
|
+
location?: {
|
|
9
|
+
file: string;
|
|
10
|
+
line: number;
|
|
11
|
+
column: number;
|
|
12
|
+
function?: string;
|
|
13
|
+
};
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
export interface TransportOptions {
|
|
17
|
+
level?: LogLevel;
|
|
18
|
+
transform?: (record: TransportRecord) => TransportRecord | null;
|
|
19
|
+
batchSize?: number;
|
|
20
|
+
flushInterval?: number;
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
export interface TransportTarget {
|
|
24
|
+
target: string | ITransport;
|
|
25
|
+
options?: TransportOptions;
|
|
26
|
+
level?: LogLevel;
|
|
27
|
+
}
|
|
28
|
+
export interface ITransport {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
write(record: TransportRecord): void | Promise<void>;
|
|
31
|
+
flush?(): void | Promise<void>;
|
|
32
|
+
close?(): void | Promise<void>;
|
|
33
|
+
isReady?(): boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface IBufferedTransport extends ITransport {
|
|
36
|
+
readonly bufferSize: number;
|
|
37
|
+
readonly maxBufferSize: number;
|
|
38
|
+
flush(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export interface ITransportManager {
|
|
41
|
+
add(target: TransportTarget): string;
|
|
42
|
+
remove(id: string): boolean;
|
|
43
|
+
write(record: TransportRecord): Promise<void>;
|
|
44
|
+
flush(): Promise<void>;
|
|
45
|
+
close(): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=transports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../../src/types/transports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,eAAe,GAAG,IAAI,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAC9B,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
package/docs/API.md
CHANGED
|
@@ -11,6 +11,10 @@ Complete API documentation for Better Logger with detailed method signatures, pa
|
|
|
11
11
|
## Table of Contents
|
|
12
12
|
|
|
13
13
|
- [Core Logger](#core-logger)
|
|
14
|
+
- [Enterprise Features (v3.0.0)](#enterprise-features-v300)
|
|
15
|
+
- [Custom Serializers](#custom-serializers)
|
|
16
|
+
- [Hooks & Middleware](#hooks--middleware)
|
|
17
|
+
- [Transports](#transports)
|
|
14
18
|
- [Style Builder](#style-builder)
|
|
15
19
|
- [CLI Interface](#cli-interface)
|
|
16
20
|
- [Export & Remote](#export--remote)
|
|
@@ -191,6 +195,229 @@ logger.addHandler({
|
|
|
191
195
|
|
|
192
196
|
---
|
|
193
197
|
|
|
198
|
+
## 🔄 Enterprise Features (v3.0.0)
|
|
199
|
+
|
|
200
|
+
### Custom Serializers
|
|
201
|
+
|
|
202
|
+
Transform objects before logging with type-based serializers.
|
|
203
|
+
|
|
204
|
+
#### `logger.addSerializer(type, serializer, priority?)`
|
|
205
|
+
Register a serializer for a specific type.
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// Serialize Error objects
|
|
209
|
+
logger.addSerializer(Error, (err) => ({
|
|
210
|
+
name: err.name,
|
|
211
|
+
message: err.message,
|
|
212
|
+
stack: err.stack?.split('\n').slice(0, 5)
|
|
213
|
+
}));
|
|
214
|
+
|
|
215
|
+
// Serialize User objects (omit sensitive data)
|
|
216
|
+
logger.addSerializer(User, (user) => ({
|
|
217
|
+
id: user.id,
|
|
218
|
+
email: user.email
|
|
219
|
+
// password automatically omitted
|
|
220
|
+
}), 100); // higher priority
|
|
221
|
+
|
|
222
|
+
// Now objects are serialized automatically
|
|
223
|
+
logger.error('Failed:', new Error('Connection timeout'));
|
|
224
|
+
logger.info('User:', currentUser);
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
#### `logger.removeSerializer(type)`
|
|
228
|
+
Remove a registered serializer.
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
logger.removeSerializer(Error);
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
#### `logger.getSerializerRegistry()`
|
|
235
|
+
Access the SerializerRegistry for advanced operations.
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
const registry = logger.getSerializerRegistry();
|
|
239
|
+
const serialized = registry.serialize(complexObject);
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Hooks & Middleware
|
|
243
|
+
|
|
244
|
+
Intercept and modify log entries with hooks and middleware.
|
|
245
|
+
|
|
246
|
+
#### `logger.on(event, callback, priority?)`
|
|
247
|
+
Register a hook for an event. Returns unsubscribe function.
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
// Add correlation ID to all logs
|
|
251
|
+
const unsubscribe = logger.on('beforeLog', (entry) => {
|
|
252
|
+
entry.correlationId = getCorrelationId();
|
|
253
|
+
return entry; // Return modified entry
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Track metrics after logging
|
|
257
|
+
logger.on('afterLog', (entry) => {
|
|
258
|
+
metrics.increment(`logs.${entry.level}`);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Handle errors
|
|
262
|
+
logger.on('onError', (entry) => {
|
|
263
|
+
alertSystem.notify(entry.message);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// Unsubscribe when done
|
|
267
|
+
unsubscribe();
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### `logger.once(event, callback, priority?)`
|
|
271
|
+
Register a hook that fires only once.
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
logger.once('beforeLog', (entry) => {
|
|
275
|
+
console.log('First log entry:', entry.message);
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
#### `logger.off(event, callback)`
|
|
280
|
+
Remove a registered hook.
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
const myHook = (entry) => { /* ... */ };
|
|
284
|
+
logger.on('beforeLog', myHook);
|
|
285
|
+
// Later...
|
|
286
|
+
logger.off('beforeLog', myHook);
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### `logger.use(middleware, priority?)`
|
|
290
|
+
Add middleware to the processing pipeline.
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
// Add request context
|
|
294
|
+
logger.use((entry, next) => {
|
|
295
|
+
entry.requestId = asyncLocalStorage.getStore()?.requestId;
|
|
296
|
+
next(); // Continue to next middleware
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// Redact sensitive data
|
|
300
|
+
logger.use((entry, next) => {
|
|
301
|
+
entry.message = entry.message.replace(/password=\S+/g, 'password=***');
|
|
302
|
+
next();
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
// Middleware with priority (higher = runs first)
|
|
306
|
+
logger.use((entry, next) => {
|
|
307
|
+
entry.timestamp = new Date().toISOString();
|
|
308
|
+
next();
|
|
309
|
+
}, 100);
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### Hook Events
|
|
313
|
+
|
|
314
|
+
| Event | Description | Can Modify Entry |
|
|
315
|
+
|-------|-------------|------------------|
|
|
316
|
+
| `beforeLog` | Before log is processed | Yes |
|
|
317
|
+
| `afterLog` | After log is output | No |
|
|
318
|
+
| `onError` | When an error occurs | No |
|
|
319
|
+
|
|
320
|
+
### Transports
|
|
321
|
+
|
|
322
|
+
Send logs to multiple destinations with the transport system.
|
|
323
|
+
|
|
324
|
+
#### `logger.addTransport(target)`
|
|
325
|
+
Add a transport destination. Returns transport ID.
|
|
326
|
+
|
|
327
|
+
```typescript
|
|
328
|
+
// Built-in file transport (Node.js)
|
|
329
|
+
const fileId = logger.addTransport({
|
|
330
|
+
target: 'file',
|
|
331
|
+
options: { destination: '/var/log/app.log' }
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
// Built-in HTTP transport with batching
|
|
335
|
+
const httpId = logger.addTransport({
|
|
336
|
+
target: 'http',
|
|
337
|
+
options: {
|
|
338
|
+
url: 'https://logs.example.com/ingest',
|
|
339
|
+
headers: { 'Authorization': 'Bearer token' },
|
|
340
|
+
batchSize: 100, // Send in batches of 100
|
|
341
|
+
flushInterval: 5000 // Or every 5 seconds
|
|
342
|
+
},
|
|
343
|
+
level: 'warn' // Only warn and above
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
// Built-in console transport
|
|
347
|
+
logger.addTransport({
|
|
348
|
+
target: 'console'
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
// Custom transport
|
|
352
|
+
logger.addTransport({
|
|
353
|
+
target: {
|
|
354
|
+
name: 'elasticsearch',
|
|
355
|
+
write: async (record) => {
|
|
356
|
+
await esClient.index({
|
|
357
|
+
index: 'logs',
|
|
358
|
+
body: record
|
|
359
|
+
});
|
|
360
|
+
},
|
|
361
|
+
flush: async () => {
|
|
362
|
+
await esClient.indices.refresh({ index: 'logs' });
|
|
363
|
+
},
|
|
364
|
+
close: async () => {
|
|
365
|
+
await esClient.close();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
#### `logger.removeTransport(id)`
|
|
372
|
+
Remove a transport by ID.
|
|
373
|
+
|
|
374
|
+
```typescript
|
|
375
|
+
logger.removeTransport(fileId);
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
#### `logger.flushTransports()`
|
|
379
|
+
Force flush all transport buffers.
|
|
380
|
+
|
|
381
|
+
```typescript
|
|
382
|
+
await logger.flushTransports();
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
#### `logger.closeTransports()`
|
|
386
|
+
Close all transports (flush + cleanup).
|
|
387
|
+
|
|
388
|
+
```typescript
|
|
389
|
+
// Before application shutdown
|
|
390
|
+
await logger.closeTransports();
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
#### Transport Record Structure
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
interface TransportRecord {
|
|
397
|
+
level: LogLevel;
|
|
398
|
+
levelValue: number; // 0-4
|
|
399
|
+
time: number; // Unix timestamp
|
|
400
|
+
msg: string;
|
|
401
|
+
prefix?: string;
|
|
402
|
+
location?: {
|
|
403
|
+
file: string;
|
|
404
|
+
line: number;
|
|
405
|
+
column: number;
|
|
406
|
+
function?: string;
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
#### Built-in Transports
|
|
412
|
+
|
|
413
|
+
| Transport | Description | Options |
|
|
414
|
+
|-----------|-------------|---------|
|
|
415
|
+
| `console` | Console output | - |
|
|
416
|
+
| `file` | File logging (Node.js) | `destination`, `batchSize`, `flushInterval` |
|
|
417
|
+
| `http` | HTTP/HTTPS endpoint | `url`, `headers`, `batchSize`, `flushInterval` |
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
194
421
|
## 🎨 Style Builder
|
|
195
422
|
|
|
196
423
|
Create custom console styles programmatically.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mks2508/better-logger",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Logger avanzado para consola con estilos CSS, temas adaptativos, badges automáticos, SVG, animaciones, CLI integrado y soporte dual browser/terminal con colores ANSI",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mks2508/better-logger-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-alpha.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Universal core logging functionality for Better Logger - Works in both Node.js and browser environments",
|
|
6
6
|
"main": "dist/index.cjs",
|