@mks2508/better-logger 2.0.1 → 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.
Files changed (172) hide show
  1. package/.claude/settings.local.json +6 -1
  2. package/CHANGELOG.json +93 -1
  3. package/CHANGELOG.md +127 -0
  4. package/CLAUDE.md +14 -1
  5. package/README.md +111 -20
  6. package/bun.lock +333 -0
  7. package/dist/Logger.d.ts +851 -0
  8. package/dist/Logger.d.ts.map +1 -0
  9. package/dist/ScopedLogger.d.ts +57 -0
  10. package/dist/ScopedLogger.d.ts.map +1 -0
  11. package/dist/chunks/Logger-BCfx_yCK.js +2 -0
  12. package/dist/chunks/Logger-BCfx_yCK.js.map +1 -0
  13. package/dist/chunks/Logger-C126NTrD.js +4269 -0
  14. package/dist/chunks/Logger-C126NTrD.js.map +1 -0
  15. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +33 -0
  16. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +1 -0
  17. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +2 -0
  18. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +1 -0
  19. package/dist/chunks/environment-Ba5kShbx.js +4 -0
  20. package/dist/chunks/environment-Ba5kShbx.js.map +1 -0
  21. package/dist/chunks/environment-TI2ByCPT.js +1209 -0
  22. package/dist/chunks/environment-TI2ByCPT.js.map +1 -0
  23. package/dist/chunks/formatting-Blwy-f0W.js +2 -0
  24. package/dist/chunks/formatting-Blwy-f0W.js.map +1 -0
  25. package/dist/chunks/formatting-CuNUqGks.js +380 -0
  26. package/dist/chunks/formatting-CuNUqGks.js.map +1 -0
  27. package/dist/cli/CommandProcessor.d.ts +100 -0
  28. package/dist/cli/CommandProcessor.d.ts.map +1 -0
  29. package/dist/cli/commands/ConfigCommand.d.ts +14 -0
  30. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  31. package/dist/cli/commands/ExportCommand.d.ts +48 -0
  32. package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
  33. package/dist/cli/commands/HistoryCommand.d.ts +47 -0
  34. package/dist/cli/commands/HistoryCommand.d.ts.map +1 -0
  35. package/dist/cli/commands/StatusCommand.d.ts +30 -0
  36. package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
  37. package/dist/cli/commands/ThemeCommand.d.ts +30 -0
  38. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
  39. package/dist/cli/help.d.ts +12 -0
  40. package/dist/cli/help.d.ts.map +1 -0
  41. package/dist/cli/index.d.ts +15 -0
  42. package/dist/cli/index.d.ts.map +1 -0
  43. package/dist/constants.d.ts +227 -0
  44. package/dist/constants.d.ts.map +1 -0
  45. package/dist/core.cjs +2 -0
  46. package/dist/core.cjs.map +1 -0
  47. package/dist/core.d.ts +127 -0
  48. package/dist/core.d.ts.map +1 -0
  49. package/dist/core.js +291 -0
  50. package/dist/core.js.map +1 -0
  51. package/dist/example.d.ts +18 -0
  52. package/dist/example.d.ts.map +1 -0
  53. package/dist/exports-module.d.ts +196 -0
  54. package/dist/exports-module.d.ts.map +1 -0
  55. package/dist/exports.cjs +2 -0
  56. package/dist/exports.cjs.map +1 -0
  57. package/dist/exports.js +238 -0
  58. package/dist/exports.js.map +1 -0
  59. package/dist/handlers/AnalyticsLogHandler.d.ts +8 -0
  60. package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  61. package/dist/handlers/ExportLogHandler.d.ts +100 -0
  62. package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
  63. package/dist/handlers/FileLogHandler.d.ts +33 -0
  64. package/dist/handlers/FileLogHandler.d.ts.map +1 -0
  65. package/dist/handlers/RemoteLogHandler.d.ts +11 -0
  66. package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
  67. package/dist/handlers/index.d.ts +8 -0
  68. package/dist/handlers/index.d.ts.map +1 -0
  69. package/dist/hooks/HookManager.d.ts +21 -0
  70. package/dist/hooks/HookManager.d.ts.map +1 -0
  71. package/dist/hooks/index.d.ts +2 -0
  72. package/dist/hooks/index.d.ts.map +1 -0
  73. package/dist/index.cjs +2 -0
  74. package/dist/index.cjs.map +1 -0
  75. package/dist/index.d.ts +144 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +478 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/main.d.ts +2 -0
  80. package/dist/main.d.ts.map +1 -0
  81. package/dist/serializers/SerializerRegistry.d.ts +16 -0
  82. package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
  83. package/dist/serializers/index.d.ts +2 -0
  84. package/dist/serializers/index.d.ts.map +1 -0
  85. package/dist/styling/LogStyleBuilder.d.ts +146 -0
  86. package/dist/styling/LogStyleBuilder.d.ts.map +1 -0
  87. package/dist/styling/SemanticStyles.d.ts +178 -0
  88. package/dist/styling/SemanticStyles.d.ts.map +1 -0
  89. package/dist/styling/SmartPresets.d.ts +22 -0
  90. package/dist/styling/SmartPresets.d.ts.map +1 -0
  91. package/dist/styling/StyleBuilder.d.ts +140 -0
  92. package/dist/styling/StyleBuilder.d.ts.map +1 -0
  93. package/dist/styling/StyleCache.d.ts +42 -0
  94. package/dist/styling/StyleCache.d.ts.map +1 -0
  95. package/dist/styling/banners.d.ts +42 -0
  96. package/dist/styling/banners.d.ts.map +1 -0
  97. package/dist/styling/index.d.ts +10 -0
  98. package/dist/styling/index.d.ts.map +1 -0
  99. package/dist/styling/themes.d.ts +7 -0
  100. package/dist/styling/themes.d.ts.map +1 -0
  101. package/dist/styling-module.d.ts +178 -0
  102. package/dist/styling-module.d.ts.map +1 -0
  103. package/dist/styling.cjs +2 -0
  104. package/dist/styling.cjs.map +1 -0
  105. package/dist/styling.js +146 -0
  106. package/dist/styling.js.map +1 -0
  107. package/dist/terminal/terminal-renderer.d.ts +63 -0
  108. package/dist/terminal/terminal-renderer.d.ts.map +1 -0
  109. package/dist/transports/ConsoleTransport.d.ts +9 -0
  110. package/dist/transports/ConsoleTransport.d.ts.map +1 -0
  111. package/dist/transports/FileTransport.d.ts +15 -0
  112. package/dist/transports/FileTransport.d.ts.map +1 -0
  113. package/dist/transports/HttpTransport.d.ts +16 -0
  114. package/dist/transports/HttpTransport.d.ts.map +1 -0
  115. package/dist/transports/TransportManager.d.ts +14 -0
  116. package/dist/transports/TransportManager.d.ts.map +1 -0
  117. package/dist/transports/index.d.ts +5 -0
  118. package/dist/transports/index.d.ts.map +1 -0
  119. package/dist/types/core.d.ts +272 -0
  120. package/dist/types/core.d.ts.map +1 -0
  121. package/dist/types/handlers.d.ts +85 -0
  122. package/dist/types/handlers.d.ts.map +1 -0
  123. package/dist/types/hooks.d.ts +36 -0
  124. package/dist/types/hooks.d.ts.map +1 -0
  125. package/dist/types/index.d.ts +11 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/serializers.d.ts +25 -0
  128. package/dist/types/serializers.d.ts.map +1 -0
  129. package/dist/types/transports.d.ts +47 -0
  130. package/dist/types/transports.d.ts.map +1 -0
  131. package/dist/utils/adapter.d.ts +48 -0
  132. package/dist/utils/adapter.d.ts.map +1 -0
  133. package/dist/utils/ansi-colors.d.ts +156 -0
  134. package/dist/utils/ansi-colors.d.ts.map +1 -0
  135. package/dist/utils/environment-detector.d.ts +35 -0
  136. package/dist/utils/environment-detector.d.ts.map +1 -0
  137. package/dist/utils/environment.d.ts +47 -0
  138. package/dist/utils/environment.d.ts.map +1 -0
  139. package/dist/utils/formatting.d.ts +58 -0
  140. package/dist/utils/formatting.d.ts.map +1 -0
  141. package/dist/utils/index.d.ts +8 -0
  142. package/dist/utils/index.d.ts.map +1 -0
  143. package/dist/utils/opentui-detection.d.ts +34 -0
  144. package/dist/utils/opentui-detection.d.ts.map +1 -0
  145. package/dist/utils/output.d.ts +46 -0
  146. package/dist/utils/output.d.ts.map +1 -0
  147. package/dist/utils/stackTrace.d.ts +6 -0
  148. package/dist/utils/stackTrace.d.ts.map +1 -0
  149. package/dist/utils/timestamps.d.ts +20 -0
  150. package/dist/utils/timestamps.d.ts.map +1 -0
  151. package/dist/vite.svg +1 -0
  152. package/docs/API.md +227 -0
  153. package/package.json +1 -1
  154. package/packages/core/package.json +1 -1
  155. package/src/Logger.ts +391 -102
  156. package/src/ScopedLogger.ts +78 -318
  157. package/src/hooks/HookManager.ts +177 -0
  158. package/src/hooks/index.ts +1 -0
  159. package/src/index.ts +77 -2
  160. package/src/serializers/SerializerRegistry.ts +173 -0
  161. package/src/serializers/index.ts +1 -0
  162. package/src/styling/StyleCache.ts +131 -0
  163. package/src/transports/ConsoleTransport.ts +28 -0
  164. package/src/transports/FileTransport.ts +53 -0
  165. package/src/transports/HttpTransport.ts +56 -0
  166. package/src/transports/TransportManager.ts +130 -0
  167. package/src/transports/index.ts +4 -0
  168. package/src/types/core.ts +46 -0
  169. package/src/types/hooks.ts +45 -0
  170. package/src/types/index.ts +39 -1
  171. package/src/types/serializers.ts +30 -0
  172. package/src/types/transports.ts +52 -0
@@ -29,7 +29,12 @@
29
29
  "Bash(find:*)",
30
30
  "Bash(npm run type-check:*)",
31
31
  "Bash(git tag:*)",
32
- "Bash(npx tsc:*)"
32
+ "Bash(npx tsc:*)",
33
+ "Bash(ls -la /Volumes/KODAK1TB/REPOS y PROYECTOS/nodejs/advanced-logger/dist/*.d.ts)",
34
+ "Bash(wc:*)",
35
+ "mcp__plugin_context7_context7__resolve-library-id",
36
+ "mcp__plugin_context7_context7__get-library-docs",
37
+ "WebFetch(domain:www.nearform.com)"
33
38
  ],
34
39
  "deny": [],
35
40
  "ask": [],
package/CHANGELOG.json CHANGED
@@ -1,6 +1,98 @@
1
1
  {
2
- "current_version": "0.14.0-alpha.1",
2
+ "current_version": "0.15.0-alpha.1",
3
3
  "versions": [
4
+ {
5
+ "version": "0.15.0-alpha.1",
6
+ "date": "2025-12-28",
7
+ "type": "minor",
8
+ "title": "Versión Alpha - Mejoras y optimizaciones",
9
+ "changes": [
10
+ {
11
+ "type": "improvement",
12
+ "title": "chore: release 0.14.0-alpha.1 [skip ci]",
13
+ "description": "chore: release 0.14.0-alpha.1 [skip ci]"
14
+ },
15
+ {
16
+ "type": "improvement",
17
+ "title": "**Colores ANSI completos** para terminales con 16 colores + estilos",
18
+ "description": "**Colores ANSI completos** para terminales con 16 colores + estilos"
19
+ },
20
+ {
21
+ "type": "improvement",
22
+ "title": "**Detección automática** de entorno Next",
23
+ "description": "**Detección automática** de entorno Next.js, Webpack, CI/CD"
24
+ },
25
+ {
26
+ "type": "improvement",
27
+ "title": "**Formateo inteligente** según capacidades del terminal",
28
+ "description": "**Formateo inteligente** según capacidades del terminal"
29
+ },
30
+ {
31
+ "type": "improvement",
32
+ "title": "**Presets optimizados** para cada caso de uso",
33
+ "description": "**Presets optimizados** para cada caso de uso"
34
+ },
35
+ {
36
+ "type": "improvement",
37
+ "title": "`auto`: Detección automática del entorno óptimo",
38
+ "description": "`auto`: Detección automática del entorno óptimo"
39
+ },
40
+ {
41
+ "type": "improvement",
42
+ "title": "`ansi`: Colores ANSI para terminales modernos",
43
+ "description": "`ansi`: Colores ANSI para terminales modernos"
44
+ },
45
+ {
46
+ "type": "improvement",
47
+ "title": "`build`: Formato optimizado para builds (Next",
48
+ "description": "`build`: Formato optimizado para builds (Next.js/webpack)"
49
+ },
50
+ {
51
+ "type": "improvement",
52
+ "title": "`ci`: Formato simple para CI/CD sin emojis",
53
+ "description": "`ci`: Formato simple para CI/CD sin emojis"
54
+ },
55
+ {
56
+ "type": "improvement",
57
+ "title": "`plain`: Texto plano para máxima compatibilidad",
58
+ "description": "`plain`: Texto plano para máxima compatibilidad"
59
+ },
60
+ {
61
+ "type": "improvement",
62
+ "title": "Eliminadas dependencias circulares entre módulos",
63
+ "description": "Eliminadas dependencias circulares entre módulos"
64
+ },
65
+ {
66
+ "type": "improvement",
67
+ "title": "Imports directos para mejor tree-shaking",
68
+ "description": "Imports directos para mejor tree-shaking"
69
+ },
70
+ {
71
+ "type": "improvement",
72
+ "title": "Bundle size optimizado",
73
+ "description": "Bundle size optimizado"
74
+ },
75
+ {
76
+ "type": "improvement",
77
+ "title": "Construcción sin warnings",
78
+ "description": "Construcción sin warnings"
79
+ },
80
+ {
81
+ "type": "improvement",
82
+ "title": "1.1.0",
83
+ "description": "1.1.0"
84
+ },
85
+ {
86
+ "type": "improvement",
87
+ "title": "w",
88
+ "description": "w"
89
+ }
90
+ ],
91
+ "technical_notes": "- Implementa sistema completo de colores ANSI para terminales Node.js\n- Agrega detección automática de entorno (Next.js, CI/CD, terminal)\n- Crea presets optimizados: nextjs, webpack, ci, terminal\n- Añade formatos de salida: auto, ansi, build, ci, plain\n- Soluciona dependencias circulares entre módulos utils\n- Mejora tree-shaking con imports directos específicos\n- Configuración automática basada en variables de entorno\n- Soporte para emojis con alternativas de texto para CI",
92
+ "breaking_changes": [],
93
+ "commit_hash": "7571e0cf9cfe9c7b4f19d7b525987f530229445b",
94
+ "prefix": "alpha"
95
+ },
4
96
  {
5
97
  "version": "0.14.0-alpha.1",
6
98
  "date": "2025-09-08",
package/CHANGELOG.md CHANGED
@@ -5,6 +5,133 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.0.0] - 2024-12-28
9
+
10
+ ### 💥 Breaking Changes
11
+ - `ScopedLogger` ya no hereda de `Logger` - usa delegación para ~50-100x menos memoria
12
+ - Métodos `component()`, `api()`, `scope()` ahora son síncronos (antes devolvían Promise)
13
+ - `LogEntry` de hooks renombrado a `HookLogEntry` para evitar conflicto con handlers
14
+
15
+ ### ✨ Features
16
+
17
+ #### Custom Serializers
18
+ Sistema de serialización extensible para objetos personalizados:
19
+ ```typescript
20
+ logger.addSerializer(Error, (err) => ({
21
+ name: err.name,
22
+ message: err.message,
23
+ stack: err.stack?.split('\n').slice(0, 5)
24
+ }));
25
+
26
+ logger.addSerializer(User, (user) => ({
27
+ id: user.id,
28
+ email: user.email // password omitido por seguridad
29
+ }));
30
+ ```
31
+
32
+ #### Hooks & Middleware
33
+ Sistema de eventos y middleware para interceptar logs:
34
+ ```typescript
35
+ // Hooks
36
+ logger.on('beforeLog', (entry) => {
37
+ entry.correlationId = getCorrelationId();
38
+ return entry;
39
+ });
40
+
41
+ logger.on('afterLog', (entry) => {
42
+ metrics.increment(`logs.${entry.level}`);
43
+ });
44
+
45
+ // Middleware
46
+ logger.use((entry, next) => {
47
+ entry.requestId = asyncLocalStorage.getStore()?.requestId;
48
+ next();
49
+ });
50
+ ```
51
+
52
+ #### Transports System
53
+ Sistema de transports similar a Pino para envío de logs:
54
+ ```typescript
55
+ // File transport
56
+ logger.addTransport({
57
+ target: 'file',
58
+ options: { destination: '/var/log/app.log' }
59
+ });
60
+
61
+ // HTTP transport con batching
62
+ logger.addTransport({
63
+ target: 'http',
64
+ options: {
65
+ url: 'https://logs.example.com',
66
+ batchSize: 100,
67
+ flushInterval: 5000
68
+ },
69
+ level: 'warn'
70
+ });
71
+
72
+ // Custom transport
73
+ logger.addTransport({
74
+ target: {
75
+ name: 'elasticsearch',
76
+ write: async (record) => {
77
+ await esClient.index({ index: 'logs', body: record });
78
+ }
79
+ }
80
+ });
81
+ ```
82
+
83
+ #### Badges System
84
+ Sistema de badges para etiquetar logs:
85
+ ```typescript
86
+ logger.badges(['v3', 'stable']).info('Release publicado');
87
+ logger.badge('DEBUG').info('Modo debug activo');
88
+ logger.clearBadges();
89
+ ```
90
+
91
+ #### Interface Bindings
92
+ Nueva interfaz `Bindings` para contexto de logs:
93
+ ```typescript
94
+ interface Bindings {
95
+ scope?: string;
96
+ badges?: string[];
97
+ context?: Record<string, any>;
98
+ }
99
+ ```
100
+
101
+ ### 🚀 Performance
102
+ - **~50-100x menos memoria** en child loggers (delegación vs herencia)
103
+ - **~10-20x más rápido** creación de child loggers
104
+ - **Style Cache** con LRU y TTL para estilos computados
105
+ - Serialización automática con detección de tipos
106
+
107
+ ### 📦 New Exports
108
+ ```typescript
109
+ // Classes
110
+ export { SerializerRegistry, HookManager, TransportManager };
111
+ export { ConsoleTransport, FileTransport, HttpTransport };
112
+ export { StyleCache, getStyleCache };
113
+
114
+ // Types
115
+ export type { SerializerFn, SerializerContext, ISerializerRegistry };
116
+ export type { HookLogEntry, HookEvent, HookCallback, MiddlewareFn, IHookManager };
117
+ export type { TransportRecord, TransportTarget, ITransport, StyleCacheConfig };
118
+ ```
119
+
120
+ ---
121
+
122
+ ## [2.0.0] - 2024-12-20
123
+
124
+ ### ✨ Features
125
+ - **ScopedLogger con delegación**: Arquitectura ligera sin herencia
126
+ - **Métodos síncronos**: `component()`, `api()`, `scope()` ya no son async
127
+ - **logWithBindings()**: Método para logging con contexto de bindings
128
+
129
+ ### 🔧 Internal
130
+ - Refactorizado sistema de child loggers para mejor performance
131
+ - Reducido footprint de memoria en aplicaciones con muchos loggers
132
+
133
+ ---
134
+
8
135
  ## [1.2.0] - 2024-10-28
9
136
 
10
137
  ### ✨ Added
package/CLAUDE.md CHANGED
@@ -201,4 +201,17 @@ npm run test:workflows
201
201
  ### Environment Variables
202
202
  - `GITHUB_ACTIONS=true`: Detects CI environment
203
203
  - `RELEASE_WORKFLOW=true`: Activates release-specific conflict strategies
204
- - `GITHUB_WORKFLOW`: Workflow name for logging and context
204
+ - `GITHUB_WORKFLOW`: Workflow name for logging and context
205
+
206
+ ## Code Comments Policy
207
+
208
+ **NO agregar comentarios LLM-generated:**
209
+ - ❌ "estilo Pino", "like Pino", "inspired by X"
210
+ - ❌ "mejorado", "arreglado", "optimizado"
211
+ - ❌ Comentarios obvios que repiten el nombre de la función/interface
212
+ - ❌ "@since 3.0.0" o versiones en JSDoc (ya está en git history)
213
+
214
+ **SÍ agregar cuando sea necesario:**
215
+ - ✅ JSDoc técnico con @param, @returns, @example útiles
216
+ - ✅ Comentarios que explican el "por qué" no obvio
217
+ - ✅ TODO/FIXME con contexto específico
package/README.md CHANGED
@@ -1,27 +1,30 @@
1
1
  # 🚀 Better Logger
2
2
 
3
- **State-of-the-art console logger with advanced CSS styling, SVG support, animations, and CLI interface**
3
+ **Enterprise-grade console logger with custom serializers, hooks, transports, and beautiful styling**
4
4
 
5
5
  [![NPM Version](https://img.shields.io/npm/v/@mks2508/better-logger)](https://www.npmjs.com/package/@mks2508/better-logger)
6
6
  [![Bundle Size](https://img.shields.io/bundlephobia/minzip/@mks2508/better-logger)](https://bundlephobia.com/package/@mks2508/better-logger)
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue)](https://www.typescriptlang.org/)
8
8
  [![License](https://img.shields.io/npm/l/@mks2508/better-logger)](https://github.com/MKS2508/advanced-logger/blob/main/LICENSE)
9
9
 
10
- Transform your console logging experience with beautiful styling, professional themes, and advanced features that make debugging and monitoring a visual delight.
10
+ Transform your console logging experience with enterprise features like Pino/Winston: custom serializers, hooks/middleware, and transports - all with beautiful styling and professional themes.
11
11
 
12
12
  ## ✨ Features
13
13
 
14
+ ### Core Features
14
15
  - 🚀 **Simplified API** - 80% less code for basic use cases
15
16
  - 🎨 **Smart Presets** - Apply beautiful themes in one line: `logger.preset('cyberpunk')`
16
- - 🏷️ **Auto-Badges** - Component and API loggers with automatic tagging
17
+ - 🏷️ **Badges System** - Flexible tagging with `badges()` and `badge()`
17
18
  - 🌗 **Adaptive Themes** - Automatic light/dark mode detection
18
- - ⚡ **Context Logging** - Temporary scopes that auto-cleanup
19
- - 🎛️ **Toggle Controls** - Show/hide elements with simple methods
20
- - 📊 **Data Export** - CSV, JSON, XML export with filtering
21
- - 💻 **Interactive CLI** - Built-in command interface
22
- - 🔧 **Modular Architecture** - Import only what you need
23
19
  - 🎯 **TypeScript First** - Complete type safety and IntelliSense
24
20
 
21
+ ### Enterprise Features (v3.0.0)
22
+ - 🔄 **Custom Serializers** - Transform any object type for logging
23
+ - 🪝 **Hooks & Middleware** - Intercept and modify logs with `on()`, `use()`
24
+ - 📡 **Transports** - File, HTTP, and custom transport destinations
25
+ - ⚡ **High Performance** - ~50-100x less memory with delegation pattern
26
+ - 💾 **Style Cache** - LRU cache for computed styles
27
+
25
28
  ## 📦 Installation
26
29
 
27
30
  ### Full Package (Recommended)
@@ -77,27 +80,115 @@ logger.hideBadges();
77
80
 
78
81
  ### Component & API Logging
79
82
  ```javascript
80
- // Scoped loggers with auto-badges
83
+ // Scoped loggers with auto-badges (sync, lightweight)
81
84
  const auth = logger.component('UserAuth');
82
85
  auth.info('Login attempt'); // [COMPONENT] [UserAuth] Login attempt
83
86
  auth.success('User verified'); // [COMPONENT] [UserAuth] User verified
84
87
 
85
88
  // API loggers with multiple badges
86
- const api = logger.api('GraphQL').badges(['SLOW', 'CACHE']);
87
- api.warn('Query timeout'); // [API] [SLOW] [CACHE] [GraphQL] Query timeout
88
- api.auth('Invalid token'); // [API] [AUTH] [GraphQL] Invalid token
89
+ const api = logger.api('GraphQL');
90
+ api.badges(['SLOW', 'CACHE']).warn('Query timeout');
89
91
  ```
90
92
 
91
- ### Smart Context System
92
- ```javascript
93
- const dbLogger = logger.component('Database');
93
+ ## 🔄 Enterprise Features (v3.0.0)
94
+
95
+ ### Custom Serializers
96
+ Transform complex objects before logging:
97
+
98
+ ```typescript
99
+ // Register serializers for custom types
100
+ logger.addSerializer(Error, (err) => ({
101
+ name: err.name,
102
+ message: err.message,
103
+ stack: err.stack?.split('\n').slice(0, 5)
104
+ }));
105
+
106
+ logger.addSerializer(User, (user) => ({
107
+ id: user.id,
108
+ email: user.email // password automatically omitted
109
+ }));
110
+
111
+ // Now errors and users are serialized automatically
112
+ logger.error('Failed:', new Error('Connection timeout'));
113
+ logger.info('User login:', currentUser);
114
+ ```
115
+
116
+ ### Hooks & Middleware
117
+ Intercept and modify logs:
118
+
119
+ ```typescript
120
+ // Add correlation ID to all logs
121
+ logger.on('beforeLog', (entry) => {
122
+ entry.correlationId = getCorrelationId();
123
+ return entry;
124
+ });
125
+
126
+ // Track metrics after logging
127
+ logger.on('afterLog', (entry) => {
128
+ metrics.increment(`logs.${entry.level}`);
129
+ });
130
+
131
+ // Middleware pipeline
132
+ logger.use((entry, next) => {
133
+ entry.requestId = asyncLocalStorage.getStore()?.requestId;
134
+ next();
135
+ });
136
+
137
+ // Redact sensitive data
138
+ logger.use((entry, next) => {
139
+ entry.message = entry.message.replace(/password=\S+/g, 'password=***');
140
+ next();
141
+ });
142
+ ```
143
+
144
+ ### Transports
145
+ Send logs to multiple destinations:
146
+
147
+ ```typescript
148
+ // File transport (Node.js)
149
+ logger.addTransport({
150
+ target: 'file',
151
+ options: { destination: '/var/log/app.log' }
152
+ });
153
+
154
+ // HTTP transport with batching
155
+ logger.addTransport({
156
+ target: 'http',
157
+ options: {
158
+ url: 'https://logs.example.com/ingest',
159
+ batchSize: 100,
160
+ flushInterval: 5000
161
+ },
162
+ level: 'warn' // Only warn and above
163
+ });
94
164
 
95
- // Context auto-removes after execution
96
- dbLogger.context('Migration').run(() => {
97
- dbLogger.info('Starting migration'); // [Database:Migration] Starting migration
98
- dbLogger.success('Tables created'); // [Database:Migration] Tables created
165
+ // Custom transport
166
+ logger.addTransport({
167
+ target: {
168
+ name: 'elasticsearch',
169
+ write: async (record) => {
170
+ await esClient.index({ index: 'logs', body: record });
171
+ }
172
+ }
99
173
  });
100
- // Context automatically cleaned up
174
+
175
+ // Flush and close when shutting down
176
+ await logger.flushTransports();
177
+ await logger.closeTransports();
178
+ ```
179
+
180
+ ### Badges System
181
+ Flexible tagging for logs:
182
+
183
+ ```typescript
184
+ // Multiple badges
185
+ logger.badges(['v3', 'stable']).info('Release published');
186
+
187
+ // Chain badges
188
+ logger.badge('DEBUG').badge('AUTH').info('Token validated');
189
+
190
+ // Clear badges
191
+ logger.clearBadges().info('Clean log');
101
192
  ```
102
193
 
103
194
  ### Simple Customization