@mks2508/better-logger 0.18.2-alpha.1 → 0.18.2-alpha.2
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/README.md +38 -336
- package/dist/Logger.d.ts +243 -154
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +511 -8
- package/dist/ScopedLogger.d.ts.map +1 -1
- package/dist/chunks/HookBridge-C-AvXmPD.cjs +504 -0
- package/dist/chunks/HookBridge-C-AvXmPD.cjs.map +1 -0
- package/dist/chunks/HookBridge-CI2PH79S.js +487 -0
- package/dist/chunks/HookBridge-CI2PH79S.js.map +1 -0
- package/dist/chunks/{LogContext-L7HzynFw.cjs → LogContext-BaMXleWj.cjs} +19 -4
- package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
- package/dist/chunks/{LogContext-Cwn-1Zzb.js → LogContext-DjlITOzZ.js} +19 -4
- package/dist/chunks/LogContext-DjlITOzZ.js.map +1 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js +393 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js.map +1 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs +410 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs.map +1 -0
- package/dist/chunks/{StyleManager-CIpd6wbO.cjs → StyleManager-DQ6UNRB-.cjs} +37 -11
- package/dist/chunks/StyleManager-DQ6UNRB-.cjs.map +1 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js +113 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js.map +1 -0
- package/dist/chunks/{core-PoT7RrTK.js → core-Blfi2klP.js} +1 -4
- package/dist/chunks/core-Blfi2klP.js.map +1 -0
- package/dist/chunks/{core-Dzz7agGa.cjs → core-CqS_UBzJ.cjs} +1 -4
- package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
- package/dist/chunks/{environment-detector-CI3TrWK_.js → environment-detector-7NvnYUfr.js} +11 -11
- package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
- package/dist/chunks/{environment-detector-Cnn6wr6O.cjs → environment-detector-D-tHkKWA.cjs} +11 -11
- package/dist/chunks/environment-detector-D-tHkKWA.cjs.map +1 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs +119 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs.map +1 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js +114 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js.map +1 -0
- package/dist/chunks/{spinner-DNvxbM9a.cjs → spinner-BHyYEXsM.cjs} +319 -37
- package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
- package/dist/chunks/{spinner-D3FsF78o.js → spinner-BtkwpzYv.js} +319 -37
- package/dist/chunks/spinner-BtkwpzYv.js.map +1 -0
- package/dist/chunks/styling-CRw3KQW4.js +1592 -0
- package/dist/chunks/styling-CRw3KQW4.js.map +1 -0
- package/dist/chunks/styling-Cel2wPRy.cjs +1645 -0
- package/dist/chunks/styling-Cel2wPRy.cjs.map +1 -0
- package/dist/chunks/transports-BGfwwakw.js +1237 -0
- package/dist/chunks/transports-BGfwwakw.js.map +1 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs +1278 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs.map +1 -0
- package/dist/chunks/{utils-BqlFYocD.cjs → utils-W_cxqriN.cjs} +44 -37
- package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
- package/dist/chunks/{utils-VETbVpkR.js → utils-tKfBAWUM.js} +44 -37
- package/dist/chunks/utils-tKfBAWUM.js.map +1 -0
- package/dist/cli/CommandProcessor.d.ts +166 -19
- package/dist/cli/CommandProcessor.d.ts.map +1 -1
- package/dist/cli/commands/ConfigCommand.d.ts +36 -1
- package/dist/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/dist/cli/commands/ExportCommand.d.ts +49 -3
- package/dist/cli/commands/ExportCommand.d.ts.map +1 -1
- package/dist/cli/commands/ThemeCommand.d.ts +62 -3
- package/dist/cli/commands/ThemeCommand.d.ts.map +1 -1
- package/dist/cli/help.d.ts +30 -2
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.d.ts +29 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli.cjs +2 -2
- package/dist/cli.js +2 -2
- package/dist/context/LogContext.d.ts +165 -66
- package/dist/context/LogContext.d.ts.map +1 -1
- package/dist/context.cjs +1 -1
- package/dist/context.js +1 -1
- package/dist/core.cjs +52 -29
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +50 -27
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +52 -29
- package/dist/core.js.map +1 -1
- package/dist/hooks/HookBridge.d.ts +15 -9
- package/dist/hooks/HookBridge.d.ts.map +1 -1
- package/dist/hooks/HookManager.d.ts +295 -2
- package/dist/hooks/HookManager.d.ts.map +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.js +1 -1
- package/dist/index.cjs +1092 -212
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1092 -212
- package/dist/index.js.map +1 -1
- package/dist/playground/TerminalBridge.d.ts +23 -16
- package/dist/playground/TerminalBridge.d.ts.map +1 -1
- package/dist/playground/box.d.ts +36 -5
- package/dist/playground/box.d.ts.map +1 -1
- package/dist/playground/cli-table.d.ts +41 -5
- package/dist/playground/cli-table.d.ts.map +1 -1
- package/dist/playground/divider.d.ts +22 -3
- package/dist/playground/divider.d.ts.map +1 -1
- package/dist/playground/header.d.ts +21 -4
- package/dist/playground/header.d.ts.map +1 -1
- package/dist/playground/server-fallback.d.ts +96 -9
- package/dist/playground/server-fallback.d.ts.map +1 -1
- package/dist/playground/spinner.d.ts +159 -10
- package/dist/playground/spinner.d.ts.map +1 -1
- package/dist/playground/step.d.ts +25 -6
- package/dist/playground/step.d.ts.map +1 -1
- package/dist/playground.cjs +1 -1
- package/dist/playground.js +1 -1
- package/dist/serializers/SerializerBridge.d.ts +13 -6
- package/dist/serializers/SerializerBridge.d.ts.map +1 -1
- package/dist/serializers/SerializerRegistry.d.ts +236 -0
- package/dist/serializers/SerializerRegistry.d.ts.map +1 -1
- package/dist/serializers.cjs +1 -1
- package/dist/serializers.js +1 -1
- package/dist/styles/StyleManager.d.ts +138 -31
- package/dist/styles/StyleManager.d.ts.map +1 -1
- package/dist/styles.cjs +2 -2
- package/dist/styles.js +2 -2
- package/dist/styling/SmartPresets.d.ts +100 -6
- package/dist/styling/SmartPresets.d.ts.map +1 -1
- package/dist/styling/StyleBuilder.d.ts +453 -32
- package/dist/styling/StyleBuilder.d.ts.map +1 -1
- package/dist/styling/banners.d.ts +83 -7
- package/dist/styling/banners.d.ts.map +1 -1
- package/dist/styling/themes.d.ts +41 -2
- package/dist/styling/themes.d.ts.map +1 -1
- package/dist/transports/ConsoleTransport.d.ts +95 -0
- package/dist/transports/ConsoleTransport.d.ts.map +1 -1
- package/dist/transports/FileTransport.d.ts +99 -18
- package/dist/transports/FileTransport.d.ts.map +1 -1
- package/dist/transports/HttpTransport.d.ts +135 -22
- package/dist/transports/HttpTransport.d.ts.map +1 -1
- package/dist/transports/OtlpTransport.d.ts +53 -36
- package/dist/transports/OtlpTransport.d.ts.map +1 -1
- package/dist/transports/TransportBridge.d.ts +19 -13
- package/dist/transports/TransportBridge.d.ts.map +1 -1
- package/dist/transports/TransportManager.d.ts +223 -8
- package/dist/transports/TransportManager.d.ts.map +1 -1
- package/dist/transports.cjs +1 -1
- package/dist/transports.js +1 -1
- package/dist/types/core.d.ts +155 -59
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +92 -14
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/serializers.d.ts +72 -0
- package/dist/types/serializers.d.ts.map +1 -1
- package/dist/types/transports.d.ts +42 -37
- package/dist/types/transports.d.ts.map +1 -1
- package/dist/utils/ansi-colors.d.ts +15 -15
- package/dist/utils/environment-detector.d.ts +11 -11
- package/dist/utils/formatting.d.ts +8 -8
- package/dist/utils/output.d.ts +9 -9
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/stackTrace.d.ts +2 -2
- package/package.json +24 -25
- package/dist/chunks/HookBridge-CiRfR67f.cjs +0 -190
- package/dist/chunks/HookBridge-CiRfR67f.cjs.map +0 -1
- package/dist/chunks/HookBridge-SgMmbXZB.js +0 -173
- package/dist/chunks/HookBridge-SgMmbXZB.js.map +0 -1
- package/dist/chunks/LogContext-Cwn-1Zzb.js.map +0 -1
- package/dist/chunks/LogContext-L7HzynFw.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs +0 -166
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BkpQu5c9.js +0 -149
- package/dist/chunks/SerializerBridge-BkpQu5c9.js.map +0 -1
- package/dist/chunks/StyleManager-CIpd6wbO.cjs.map +0 -1
- package/dist/chunks/StyleManager-LCvVlVdx.js +0 -87
- package/dist/chunks/StyleManager-LCvVlVdx.js.map +0 -1
- package/dist/chunks/core-Dzz7agGa.cjs.map +0 -1
- package/dist/chunks/core-PoT7RrTK.js.map +0 -1
- package/dist/chunks/environment-detector-CI3TrWK_.js.map +0 -1
- package/dist/chunks/environment-detector-Cnn6wr6O.cjs.map +0 -1
- package/dist/chunks/server-fallback-BUKjdLS7.cjs +0 -42
- package/dist/chunks/server-fallback-BUKjdLS7.cjs.map +0 -1
- package/dist/chunks/server-fallback-BsuWH1Dk.js +0 -37
- package/dist/chunks/server-fallback-BsuWH1Dk.js.map +0 -1
- package/dist/chunks/spinner-D3FsF78o.js.map +0 -1
- package/dist/chunks/spinner-DNvxbM9a.cjs.map +0 -1
- package/dist/chunks/styling-84N8T97t.js +0 -941
- package/dist/chunks/styling-84N8T97t.js.map +0 -1
- package/dist/chunks/styling-Cg5saQ46.cjs +0 -994
- package/dist/chunks/styling-Cg5saQ46.cjs.map +0 -1
- package/dist/chunks/transports-BiDk345e.js +0 -715
- package/dist/chunks/transports-BiDk345e.js.map +0 -1
- package/dist/chunks/transports-COPWmlF1.cjs +0 -756
- package/dist/chunks/transports-COPWmlF1.cjs.map +0 -1
- package/dist/chunks/utils-BqlFYocD.cjs.map +0 -1
- package/dist/chunks/utils-VETbVpkR.js.map +0 -1
- package/dist/example.d.ts +0 -18
- package/dist/example.d.ts.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.d.ts.map +0 -1
|
@@ -1,132 +1,216 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview LogContext
|
|
3
|
-
* Encapsulates per-logger structured context, child logger creation, and
|
|
4
|
-
* OTel resource merging.
|
|
2
|
+
* @fileoverview Bridge de LogContext — gestión de MDC (Mapped Diagnostic Context).
|
|
5
3
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - `
|
|
11
|
-
*
|
|
4
|
+
* Encapsula el contexto estructurado por logger, la creación de child loggers y
|
|
5
|
+
* el merge de resource OTel en cada record emitido.
|
|
6
|
+
*
|
|
7
|
+
* Modelo de API:
|
|
8
|
+
* - `withContext(bindings, fn?)` — si se pasa `fn`, lo ejecuta dentro de un
|
|
9
|
+
* scope de AsyncLocalStorage mergeando `bindings`. Sin `fn`: no-op (shim de
|
|
10
|
+
* backwards compat para la vieja forma de setter).
|
|
11
|
+
* - `withContextAsync(bindings, fn)` — variante async callback.
|
|
12
|
+
* - `child(bindings)` — inmutable (patrón canónico de MDC).
|
|
13
|
+
* - Feature-detect de AsyncLocalStorage; en browser sin ALS es no-op.
|
|
12
14
|
*/
|
|
13
15
|
import type { ILogResourceRef } from '../types/index.js';
|
|
14
16
|
import type { LoggerConfig } from '../types/index.js';
|
|
15
17
|
/**
|
|
16
|
-
* Snapshot
|
|
18
|
+
* Snapshot del contexto bound. Lo retorna {@link LogContext.getContext}.
|
|
19
|
+
*
|
|
20
|
+
* Es `Readonly` para marcar contractually que el objeto devuelto es una shallow
|
|
21
|
+
* copy: mutarlo no afecta a los records que emitan futuras llamadas de log.
|
|
17
22
|
*/
|
|
18
23
|
export type ContextSnapshot = Readonly<Record<string, unknown>>;
|
|
19
24
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
+
* Tipo de la factory function para crear instancias child de Logger.
|
|
26
|
+
*
|
|
27
|
+
* Se inyecta en LogContext para que `child()` pueda instanciar nuevos loggers
|
|
28
|
+
* sin introducir un import circular entre `Logger.ts` y `LogContext.ts`.
|
|
29
|
+
* Retorna `unknown` — la clase Logger concreta la maneja el caller, y la
|
|
30
|
+
* instancia devuelta tiene su campo `context` escrito por LogContext tras la
|
|
31
|
+
* creación.
|
|
25
32
|
*/
|
|
26
33
|
export type ChildLoggerFactory = (config: Partial<LoggerConfig>) => unknown;
|
|
27
34
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* `
|
|
35
|
+
* Shape mínima de una instancia de Logger que LogContext necesita ver.
|
|
36
|
+
*
|
|
37
|
+
* Evita dependencias circulares entre LogContext y Logger. El campo
|
|
38
|
+
* `_parentContextRecord` lo setea el Logger padre después de que
|
|
39
|
+
* `LogContext.child()` retorna, estableciendo la cadena de contextos.
|
|
32
40
|
*/
|
|
33
41
|
export interface ChildLoggerShape {
|
|
34
42
|
_parentContextRecord?: Record<string, unknown>;
|
|
35
|
-
/**
|
|
43
|
+
/** Campo legacy — ya no es la fuente canónica del contexto. */
|
|
36
44
|
context?: Record<string, unknown>;
|
|
37
45
|
}
|
|
38
46
|
/**
|
|
39
|
-
* Options
|
|
47
|
+
* Options que se pasan a {@link createLogContext}.
|
|
40
48
|
*/
|
|
41
49
|
export interface ILogContextOptions {
|
|
42
|
-
/**
|
|
50
|
+
/** Pares key-value iniciales del contexto. */
|
|
43
51
|
initialContext?: Record<string, unknown>;
|
|
44
|
-
/** Factory
|
|
52
|
+
/** Factory para crear instancias child de logger. */
|
|
45
53
|
childLoggerFactory: ChildLoggerFactory;
|
|
46
|
-
/**
|
|
54
|
+
/** Resource OTel inicial a mergear en cada record emitido. */
|
|
47
55
|
initialResource?: Partial<ILogResourceRef>;
|
|
48
56
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
57
|
+
* Retorna el record de contexto mergeado del logger padre en el momento
|
|
58
|
+
* de creación del child. Lo usa `_getContextRecord()` para construir la
|
|
59
|
+
* cadena de contextos.
|
|
51
60
|
* @internal
|
|
52
61
|
*/
|
|
53
62
|
getParentContextRecord?: () => Record<string, unknown>;
|
|
54
63
|
/**
|
|
55
|
-
*
|
|
64
|
+
* Instancia de AsyncLocalStorage a usar para el scoping de `withContext`.
|
|
56
65
|
* @internal
|
|
57
66
|
*/
|
|
58
67
|
alsInstance?: ALS;
|
|
59
68
|
}
|
|
60
69
|
/**
|
|
61
|
-
*
|
|
70
|
+
* Contrato que retorna {@link createLogContext}.
|
|
71
|
+
*
|
|
72
|
+
* Fachada de MDC (Mapped Diagnostic Context) por logger. Combina tres fuentes
|
|
73
|
+
* de contexto:
|
|
74
|
+
* - **base inmutable** vía `child()` (snapshot capturado al crear el child),
|
|
75
|
+
* - **scope transitorio** vía `withContext()` / `withContextAsync()` sobre
|
|
76
|
+
* AsyncLocalStorage,
|
|
77
|
+
* - **resource OTel** mergeado en cada record.
|
|
78
|
+
*
|
|
79
|
+
* En entornos browser sin `AsyncLocalStorage`, las variantes `withContext*`
|
|
80
|
+
* degradan a no-op: ejecutan `fn` sin scoping (o lo skipan si no hay `fn`).
|
|
81
|
+
* `child()` sigue operativo en browser porque no depende de ALS.
|
|
62
82
|
*/
|
|
63
83
|
export interface LogContext {
|
|
64
84
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
85
|
+
* Snapshot actual del contexto bound.
|
|
86
|
+
*
|
|
87
|
+
* @returns Copia inmutable (shallow) del contexto; mutarla no afecta a los
|
|
88
|
+
* records que emitan futuras llamadas de log.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* const ctx = logContext.getContext();
|
|
92
|
+
* console.log(ctx.requestId); // 'abc-123'
|
|
67
93
|
*/
|
|
68
94
|
getContext(): ContextSnapshot;
|
|
69
95
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
96
|
+
* Ejecuta `fn` dentro de un scope de AsyncLocalStorage donde `bindings`
|
|
97
|
+
* se mergean al contexto para todas las llamadas de log dentro de `fn`.
|
|
72
98
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
99
|
+
* Si no se pasa `fn` (la vieja forma de setter), es no-op por backwards
|
|
100
|
+
* compatibility. Para binding persistente prefiere `child()`; para
|
|
101
|
+
* callbacks async usa `withContextAsync()`.
|
|
76
102
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
103
|
+
* **Browser fallback**: sin ALS, ejecuta `fn` directamente sin scoping
|
|
104
|
+
* (los bindings NO se mergean). Si tampoco hay `fn`, retorna `undefined`.
|
|
105
|
+
*
|
|
106
|
+
* @param bindings - Pares key-value a attachar durante la ejecución de `fn`
|
|
107
|
+
* @param fn - Función sincrónica opcional a ejecutar bajo el scope ALS
|
|
108
|
+
* @returns El valor de retorno de `fn`, o `undefined` si no se pasa `fn`
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* logContext.withContext({ requestId: 'abc-123' }, () => {
|
|
112
|
+
* logger.info('procesando'); // el record lleva requestId=abc-123
|
|
113
|
+
* });
|
|
114
|
+
* // fuera de fn: requestId ya no está presente en próximos logs
|
|
115
|
+
*
|
|
116
|
+
* @see {@link LogContext.withContextAsync} para callbacks async
|
|
117
|
+
* @see {@link LogContext.child} para binding persistente inmutable (sin ALS)
|
|
80
118
|
*/
|
|
81
119
|
withContext<R>(bindings: Record<string, unknown>, fn?: () => R): R | undefined;
|
|
82
120
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
121
|
+
* Variante async de {@link withContext}. Ejecuta `fn` dentro de un scope
|
|
122
|
+
* de AsyncLocalStorage para que los bindings queden disponibles a todas las
|
|
123
|
+
* llamadas de log async dentro de `fn` (incluso tras `await`).
|
|
124
|
+
*
|
|
125
|
+
* **Browser fallback**: sin ALS, ejecuta `fn` directamente sin scoping.
|
|
85
126
|
*
|
|
86
|
-
* @param bindings -
|
|
87
|
-
* @param fn -
|
|
88
|
-
* @returns
|
|
127
|
+
* @param bindings - Pares key-value a attachar durante la ejecución de `fn`
|
|
128
|
+
* @param fn - Función async a ejecutar bajo el scope ALS
|
|
129
|
+
* @returns El Promise retornado por `fn`
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* await logContext.withContextAsync({ traceId }, async () => {
|
|
133
|
+
* const user = await fetchUser();
|
|
134
|
+
* logger.info('user cargado', { id: user.id });
|
|
135
|
+
* // el record lleva el traceId aunque el log ocurra tras un await
|
|
136
|
+
* });
|
|
89
137
|
*/
|
|
90
138
|
withContextAsync<R>(bindings: Record<string, unknown>, fn: () => Promise<R>): Promise<R>;
|
|
91
139
|
/**
|
|
92
|
-
*
|
|
93
|
-
* records no
|
|
94
|
-
* {@link child}
|
|
140
|
+
* Droppea todas las keys del contexto bound. Tras esta llamada, los
|
|
141
|
+
* records emitidos ya no llevan `attributes` hasta que
|
|
142
|
+
* {@link withContext} o {@link child} restablezcan uno.
|
|
143
|
+
*
|
|
144
|
+
* @returns La misma instancia de LogContext, ahora sin contexto
|
|
95
145
|
*
|
|
96
|
-
* @
|
|
146
|
+
* @example
|
|
147
|
+
* logContext.clearContext();
|
|
148
|
+
* logger.info('limpio'); // sin attributes
|
|
97
149
|
*/
|
|
98
150
|
clearContext(): this;
|
|
99
151
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
152
|
+
* Actualiza el resource OTel por defecto (service.name, version,
|
|
153
|
+
* deployment.environment, ...).
|
|
154
|
+
*
|
|
155
|
+
* Se persiste en el campo `resource` de cada record emitido, salvo que el
|
|
156
|
+
* propio record lo overridee.
|
|
157
|
+
*
|
|
158
|
+
* @param resource - Resource OTel parcial a mergear con el actual
|
|
159
|
+
* @returns La misma instancia de LogContext, para encadenar calls
|
|
103
160
|
*
|
|
104
|
-
* @
|
|
105
|
-
*
|
|
161
|
+
* @example
|
|
162
|
+
* logContext.setResource({ serviceName: 'api-gateway', environment: 'prod' });
|
|
106
163
|
*/
|
|
107
164
|
setResource(resource: Partial<ILogResourceRef>): this;
|
|
108
165
|
/**
|
|
109
|
-
*
|
|
110
|
-
* Future calls on the child emit with the merged context, without
|
|
111
|
-
* mutating the parent — the canonical MDC pattern.
|
|
166
|
+
* Devuelve una copia inmutable de este logger con el contexto extra bound.
|
|
112
167
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
168
|
+
* Las llamadas futuras sobre el child emiten con el contexto mergeado, sin
|
|
169
|
+
* mutar al padre — patrón canónico de MDC.
|
|
170
|
+
*
|
|
171
|
+
* A diferencia de {@link withContext}, **no involucra AsyncLocalStorage**:
|
|
172
|
+
* el binding es persistente y queda capturado en el snapshot del child al
|
|
173
|
+
* crearse. Por eso `child()` es operativo también en browser sin ALS.
|
|
174
|
+
*
|
|
175
|
+
* Los bindings transitorios de ALS activos en el momento de `child()` NO
|
|
176
|
+
* se bakean en el child — solo se captura el contexto base. ALS se aplica
|
|
177
|
+
* fresco en cada dispatch vía `_getContextRecord()`.
|
|
178
|
+
*
|
|
179
|
+
* @param extra - Pares key-value a attachar (requestId, userId, ...)
|
|
180
|
+
* @returns Un nuevo Logger con el contexto mergeado
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* const requestLog = logContext.child({ requestId: 'abc-123' });
|
|
184
|
+
* requestLog.info('inicio'); // siempre lleva requestId=abc-123
|
|
185
|
+
* requestLog.info('fin');
|
|
186
|
+
* // el logger padre no se ve afectado por estos bindings
|
|
187
|
+
*
|
|
188
|
+
* @see {@link LogContext.withContext} para scoping transitorio (ALS)
|
|
115
189
|
*/
|
|
116
190
|
child(extra: Record<string, unknown>): ChildLoggerShape;
|
|
117
|
-
/**
|
|
191
|
+
/**
|
|
192
|
+
* Record de contexto interno. Expuesto para el ensamblado de TransportRecord
|
|
193
|
+
* (base + overlay ALS si hay store activo).
|
|
194
|
+
* @internal
|
|
195
|
+
*/
|
|
118
196
|
_getContextRecord(): Record<string, unknown>;
|
|
119
197
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* child
|
|
198
|
+
* Retorna el contexto base SIN el overlay de ALS.
|
|
199
|
+
*
|
|
200
|
+
* Lo usa `Logger.child()` para capturar el snapshot del contexto padre al
|
|
201
|
+
* crear un child logger, garantizando que el binding ALS transitorio no
|
|
202
|
+
* se bakeé en el child.
|
|
123
203
|
* @internal
|
|
124
204
|
*/
|
|
125
205
|
_getBaseContextRecord(): Record<string, unknown>;
|
|
126
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* Record de resource interno. Expuesto para el ensamblado de TransportRecord.
|
|
208
|
+
* @internal
|
|
209
|
+
*/
|
|
127
210
|
_getResource(): Partial<ILogResourceRef> | undefined;
|
|
128
211
|
/**
|
|
129
|
-
*
|
|
212
|
+
* Retorna el store actual de AsyncLocalStorage, si ALS está activo en el
|
|
213
|
+
* call stack corriente.
|
|
130
214
|
* @internal
|
|
131
215
|
*/
|
|
132
216
|
_getAlsStore(): Record<string, unknown> | undefined;
|
|
@@ -136,10 +220,25 @@ type ALS = {
|
|
|
136
220
|
getStore(): Record<string, unknown> | undefined;
|
|
137
221
|
};
|
|
138
222
|
/**
|
|
139
|
-
*
|
|
223
|
+
* Factory que crea una instancia de {@link LogContext}.
|
|
224
|
+
*
|
|
225
|
+
* @param options - Configuración (ver {@link ILogContextOptions})
|
|
226
|
+
* @returns Una instancia de LogContext lista para usar
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* const logContext = createLogContext({
|
|
230
|
+
* childLoggerFactory: (cfg) => new Logger(cfg),
|
|
231
|
+
* initialContext: { service: 'orders-api' },
|
|
232
|
+
* initialResource: { serviceName: 'orders-api', environment: 'prod' }
|
|
233
|
+
* });
|
|
234
|
+
*
|
|
235
|
+
* // Child inmutable con contexto persistente
|
|
236
|
+
* const requestLog = logContext.child({ requestId: 'abc-123' });
|
|
140
237
|
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
238
|
+
* // Scope transitorio vía ALS (Node; en browser sin ALS es no-op)
|
|
239
|
+
* logContext.withContext({ traceId: 't-9' }, () => {
|
|
240
|
+
* requestLog.info('procesando orden');
|
|
241
|
+
* });
|
|
143
242
|
*/
|
|
144
243
|
export declare function createLogContext(options: ILogContextOptions): LogContext;
|
|
145
244
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogContext.d.ts","sourceRoot":"","sources":["../../src/context/LogContext.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"LogContext.d.ts","sourceRoot":"","sources":["../../src/context/LogContext.ts"],"names":[],"mappings":"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"}
|
package/dist/context.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_LogContext = require("./chunks/LogContext-
|
|
2
|
+
const require_LogContext = require("./chunks/LogContext-BaMXleWj.cjs");
|
|
3
3
|
exports.createLogContext = require_LogContext.createLogContext;
|
package/dist/context.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as createLogContext } from "./chunks/LogContext-
|
|
1
|
+
import { t as createLogContext } from "./chunks/LogContext-DjlITOzZ.js";
|
|
2
2
|
export { createLogContext };
|
package/dist/core.cjs
CHANGED
|
@@ -2,17 +2,17 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_core = require("./chunks/core-
|
|
6
|
-
const require_utils = require("./chunks/utils-
|
|
7
|
-
const require_environment_detector = require("./chunks/environment-detector-
|
|
5
|
+
const require_core = require("./chunks/core-CqS_UBzJ.cjs");
|
|
6
|
+
const require_utils = require("./chunks/utils-W_cxqriN.cjs");
|
|
7
|
+
const require_environment_detector = require("./chunks/environment-detector-D-tHkKWA.cjs");
|
|
8
8
|
//#region src/core.ts
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* Logger minimal con solo la funcionalidad core.
|
|
11
|
+
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```typescript
|
|
14
14
|
* import { CoreLogger } from '@mks2508/better-logger/core';
|
|
15
|
-
*
|
|
15
|
+
*
|
|
16
16
|
* const logger = new CoreLogger();
|
|
17
17
|
* logger.info('Hello world');
|
|
18
18
|
* logger.error('Something went wrong', error);
|
|
@@ -25,8 +25,8 @@ var CoreLogger = class CoreLogger {
|
|
|
25
25
|
timers = /* @__PURE__ */ new Map();
|
|
26
26
|
groupDepth = 0;
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
29
|
-
* @param config -
|
|
28
|
+
* Crea una nueva instancia de CoreLogger.
|
|
29
|
+
* @param config - Configuración opcional.
|
|
30
30
|
*/
|
|
31
31
|
constructor(config = {}) {
|
|
32
32
|
this.config = {
|
|
@@ -40,25 +40,29 @@ var CoreLogger = class CoreLogger {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* Obtiene la configuración actual.
|
|
44
44
|
*/
|
|
45
45
|
getConfig() {
|
|
46
46
|
return { ...this.config };
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Define el prefijo global para todos los mensajes de log.
|
|
50
|
+
* @param prefix - Prefijo a aplicar a todos los mensajes.
|
|
50
51
|
*/
|
|
51
52
|
setGlobalPrefix(prefix) {
|
|
52
53
|
this.config.globalPrefix = prefix;
|
|
53
54
|
}
|
|
54
55
|
/**
|
|
55
|
-
*
|
|
56
|
+
* Define el nivel de verbosity para filtrar la salida de log.
|
|
57
|
+
* @param level - Nivel de verbosity.
|
|
56
58
|
*/
|
|
57
59
|
setVerbosity(level) {
|
|
58
60
|
this.config.verbosity = level;
|
|
59
61
|
}
|
|
60
62
|
/**
|
|
61
|
-
*
|
|
63
|
+
* Crea un logger con scope y un prefijo específico.
|
|
64
|
+
* @param prefix - Prefijo del scope.
|
|
65
|
+
* @returns Nueva instancia de CoreLogger con el prefijo asignado.
|
|
62
66
|
*/
|
|
63
67
|
scope(prefix) {
|
|
64
68
|
const scopedLogger = new CoreLogger(this.config);
|
|
@@ -67,13 +71,16 @@ var CoreLogger = class CoreLogger {
|
|
|
67
71
|
return scopedLogger;
|
|
68
72
|
}
|
|
69
73
|
/**
|
|
70
|
-
*
|
|
74
|
+
* Añade un handler personalizado para extensibilidad.
|
|
75
|
+
* @param handler - Handler que implementa la interfaz ILogHandler.
|
|
71
76
|
*/
|
|
72
77
|
addHandler(handler) {
|
|
73
78
|
this.handlers.push(handler);
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
|
-
*
|
|
81
|
+
* Comprueba si un nivel debe emitirse según el verbosity actual.
|
|
82
|
+
* @param level - Nivel a evaluar.
|
|
83
|
+
* @returns `true` si el nivel debe emitirse.
|
|
77
84
|
*/
|
|
78
85
|
shouldLog(level) {
|
|
79
86
|
if (this.config.verbosity === "silent") return false;
|
|
@@ -81,14 +88,17 @@ var CoreLogger = class CoreLogger {
|
|
|
81
88
|
return require_core.LOG_LEVELS[level] >= require_core.LOG_LEVELS[verbosity];
|
|
82
89
|
}
|
|
83
90
|
/**
|
|
84
|
-
*
|
|
91
|
+
* Obtiene el prefijo efectivo (global + scope).
|
|
92
|
+
* @returns Prefijo combinado o `undefined` si no hay ninguno.
|
|
85
93
|
*/
|
|
86
94
|
getEffectivePrefix() {
|
|
87
95
|
const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);
|
|
88
96
|
return parts.length > 0 ? parts.join(":") : void 0;
|
|
89
97
|
}
|
|
90
98
|
/**
|
|
91
|
-
*
|
|
99
|
+
* Método principal de log con formato universal.
|
|
100
|
+
* @param level - Nivel del mensaje.
|
|
101
|
+
* @param args - Argumentos del mensaje.
|
|
92
102
|
*/
|
|
93
103
|
log(level, ...args) {
|
|
94
104
|
if (!this.shouldLog(level)) return;
|
|
@@ -123,44 +133,52 @@ var CoreLogger = class CoreLogger {
|
|
|
123
133
|
});
|
|
124
134
|
}
|
|
125
135
|
/**
|
|
126
|
-
*
|
|
136
|
+
* Emite mensajes de debug (prioridad más baja).
|
|
137
|
+
* @param args - Argumentos del mensaje.
|
|
127
138
|
*/
|
|
128
139
|
debug(...args) {
|
|
129
140
|
this.log("debug", ...args);
|
|
130
141
|
}
|
|
131
142
|
/**
|
|
132
|
-
*
|
|
143
|
+
* Emite mensajes informativos.
|
|
144
|
+
* @param args - Argumentos del mensaje.
|
|
133
145
|
*/
|
|
134
146
|
info(...args) {
|
|
135
147
|
this.log("info", ...args);
|
|
136
148
|
}
|
|
137
149
|
/**
|
|
138
|
-
*
|
|
150
|
+
* Emite mensajes de advertencia.
|
|
151
|
+
* @param args - Argumentos del mensaje.
|
|
139
152
|
*/
|
|
140
153
|
warn(...args) {
|
|
141
154
|
this.log("warn", ...args);
|
|
142
155
|
}
|
|
143
156
|
/**
|
|
144
|
-
*
|
|
157
|
+
* Emite mensajes de error.
|
|
158
|
+
* @param args - Argumentos del mensaje.
|
|
145
159
|
*/
|
|
146
160
|
error(...args) {
|
|
147
161
|
this.log("error", ...args);
|
|
148
162
|
}
|
|
149
163
|
/**
|
|
150
|
-
*
|
|
164
|
+
* Emite errores críticos (prioridad más alta).
|
|
165
|
+
* @param args - Argumentos del mensaje.
|
|
151
166
|
*/
|
|
152
167
|
critical(...args) {
|
|
153
168
|
this.log("critical", ...args);
|
|
154
169
|
}
|
|
155
170
|
/**
|
|
156
|
-
*
|
|
171
|
+
* Emite información de trace (debugging detallado).
|
|
172
|
+
* @param args - Argumentos del mensaje.
|
|
157
173
|
*/
|
|
158
174
|
trace(...args) {
|
|
159
175
|
this.log("debug", ...args);
|
|
160
176
|
if (this.shouldLog("debug")) console.trace(...args);
|
|
161
177
|
}
|
|
162
178
|
/**
|
|
163
|
-
*
|
|
179
|
+
* Muestra datos en formato tabla.
|
|
180
|
+
* @param data - Datos a mostrar.
|
|
181
|
+
* @param columns - Columnas opcionales a incluir.
|
|
164
182
|
*/
|
|
165
183
|
table(data, columns) {
|
|
166
184
|
if (!this.shouldLog("info")) return;
|
|
@@ -177,7 +195,9 @@ var CoreLogger = class CoreLogger {
|
|
|
177
195
|
}
|
|
178
196
|
}
|
|
179
197
|
/**
|
|
180
|
-
*
|
|
198
|
+
* Inicia un grupo colapsable en la console.
|
|
199
|
+
* @param label - Etiqueta del grupo.
|
|
200
|
+
* @param collapsed - Si el grupo inicia colapsado.
|
|
181
201
|
*/
|
|
182
202
|
group(label, collapsed = false) {
|
|
183
203
|
const prefix = this.getEffectivePrefix();
|
|
@@ -191,7 +211,7 @@ var CoreLogger = class CoreLogger {
|
|
|
191
211
|
this.groupDepth++;
|
|
192
212
|
}
|
|
193
213
|
/**
|
|
194
|
-
*
|
|
214
|
+
* Cierra el grupo actual de la console.
|
|
195
215
|
*/
|
|
196
216
|
groupEnd() {
|
|
197
217
|
if (this.groupDepth > 0) {
|
|
@@ -201,7 +221,8 @@ var CoreLogger = class CoreLogger {
|
|
|
201
221
|
}
|
|
202
222
|
}
|
|
203
223
|
/**
|
|
204
|
-
*
|
|
224
|
+
* Inicia un timer con el label indicado.
|
|
225
|
+
* @param label - Identificador del timer.
|
|
205
226
|
*/
|
|
206
227
|
time(label) {
|
|
207
228
|
const timer = {
|
|
@@ -214,7 +235,8 @@ var CoreLogger = class CoreLogger {
|
|
|
214
235
|
console.log(output);
|
|
215
236
|
}
|
|
216
237
|
/**
|
|
217
|
-
*
|
|
238
|
+
* Detiene un timer y emite el tiempo transcurrido.
|
|
239
|
+
* @param label - Identificador del timer previamente iniciado.
|
|
218
240
|
*/
|
|
219
241
|
timeEnd(label) {
|
|
220
242
|
const timer = this.timers.get(label);
|
|
@@ -229,7 +251,8 @@ var CoreLogger = class CoreLogger {
|
|
|
229
251
|
console.log(output);
|
|
230
252
|
}
|
|
231
253
|
/**
|
|
232
|
-
*
|
|
254
|
+
* Obtiene `performance.now()` o un fallback para entornos antiguos.
|
|
255
|
+
* @returns Timestamp en milisegundos.
|
|
233
256
|
*/
|
|
234
257
|
getPerformanceNow() {
|
|
235
258
|
if (typeof performance !== "undefined" && performance.now) return performance.now();
|
|
@@ -242,7 +265,7 @@ var CoreLogger = class CoreLogger {
|
|
|
242
265
|
};
|
|
243
266
|
const coreLogger = new CoreLogger();
|
|
244
267
|
/**
|
|
245
|
-
*
|
|
268
|
+
* Exporta métodos individuales por conveniencia (con binding correcto).
|
|
246
269
|
*/
|
|
247
270
|
const debug = (...args) => coreLogger.debug(...args);
|
|
248
271
|
const info = (...args) => coreLogger.info(...args);
|