lognerd 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/README.md ADDED
@@ -0,0 +1,204 @@
1
+ # lognerd
2
+
3
+ Sistema de logging con colores y escritura a archivo para Node.js. Desarrollado con TypeScript y diseñado para ser fácil de usar y configurar.
4
+
5
+ ## 🚀 Instalación
6
+
7
+ ```bash
8
+ pnpm add lognerd
9
+ ```
10
+
11
+ o con npm:
12
+
13
+ ```bash
14
+ npm install lognerd
15
+ ```
16
+
17
+ ## 📖 Uso Básico
18
+
19
+ ```typescript
20
+ import { createLogger } from 'lognerd';
21
+
22
+ const logger = createLogger();
23
+
24
+ logger.info('Aplicación iniciada');
25
+ logger.error('Error crítico', { code: 500, message: 'Error de servidor' });
26
+ logger.warn('Advertencia: conexión lenta');
27
+ logger.debug('Información de debug', { userId: 123 });
28
+ ```
29
+
30
+ ## ⚙️ Configuración
31
+
32
+ ### Configuración mediante Variables de Entorno (Recomendado)
33
+
34
+ Puedes configurar lognerd completamente mediante variables de entorno. Esto es ideal para Vite, Next.js, y otros entornos.
35
+
36
+ **⚠️ Importante para Vite:** Vite solo expone variables que comienzan con `VITE_` al código del cliente. Para Vite, usa el prefijo `VITE_LOGNERD_*`.
37
+
38
+ **Variables de entorno disponibles:**
39
+
40
+ | Variable (Node.js/Next.js) | Variable (Vite) | Descripción | Valores | Por defecto |
41
+ |----------------------------|-----------------|-------------|---------|-------------|
42
+ | `LOGNERD_LEVEL` | `VITE_LOGNERD_LEVEL` | Nivel mínimo de log | `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
43
+ | `LOGNERD_ENVIRONMENT` | `VITE_LOGNERD_ENVIRONMENT` | Entorno de ejecución | `development`, `production` | `development` |
44
+ | `NODE_ENV` | `NODE_ENV` | También se puede usar (compatible) | `development`, `production` | - |
45
+ | `LOGNERD_ENABLE_CONSOLE` | `VITE_LOGNERD_ENABLE_CONSOLE` | Habilitar salida en consola | `true`, `false`, `1`, `0` | `true` |
46
+ | `LOGNERD_ENABLE_FILE` | `VITE_LOGNERD_ENABLE_FILE` | Habilitar escritura en archivo | `true`, `false`, `1`, `0` | `true` |
47
+ | `LOGNERD_FILE_PATH` | `VITE_LOGNERD_FILE_PATH` | Ruta del archivo de log | Ruta relativa o absoluta | `./logs/app.log` |
48
+ | `LOGNERD_MAX_FILE_SIZE` | `VITE_LOGNERD_MAX_FILE_SIZE` | Tamaño máximo del archivo en MB | Número entero | `10` |
49
+ | `LOGNERD_MAX_FILES` | `VITE_LOGNERD_MAX_FILES` | Número máximo de archivos rotados | Número entero | `5` |
50
+
51
+ **Ejemplo para Node.js/Next.js:**
52
+ ```bash
53
+ # .env
54
+ LOGNERD_LEVEL=INFO
55
+ LOGNERD_ENVIRONMENT=development
56
+ LOGNERD_ENABLE_CONSOLE=true
57
+ LOGNERD_ENABLE_FILE=true
58
+ LOGNERD_FILE_PATH=./logs/app.log
59
+ LOGNERD_MAX_FILE_SIZE=10
60
+ LOGNERD_MAX_FILES=5
61
+ ```
62
+
63
+ **Ejemplo para Vite:**
64
+ ```bash
65
+ # .env
66
+ VITE_LOGNERD_LEVEL=INFO
67
+ VITE_LOGNERD_ENVIRONMENT=development
68
+ VITE_LOGNERD_ENABLE_CONSOLE=true
69
+ VITE_LOGNERD_ENABLE_FILE=true
70
+ VITE_LOGNERD_FILE_PATH=./logs/app.log
71
+ VITE_LOGNERD_MAX_FILE_SIZE=10
72
+ VITE_LOGNERD_MAX_FILES=5
73
+ ```
74
+
75
+ **Ejemplo para producción (Vite):**
76
+ ```bash
77
+ # .env.production
78
+ VITE_LOGNERD_LEVEL=WARN
79
+ VITE_LOGNERD_ENVIRONMENT=production
80
+ VITE_LOGNERD_FILE_PATH=./logs/production.log
81
+ VITE_LOGNERD_MAX_FILE_SIZE=50
82
+ VITE_LOGNERD_MAX_FILES=10
83
+ ```
84
+
85
+ ### Configuración mediante Código
86
+
87
+ También puedes configurar el logger mediante código TypeScript:
88
+
89
+ ```typescript
90
+ import { createLogger } from 'lognerd';
91
+
92
+ const logger = createLogger({
93
+ level: 'DEBUG', // Nivel mínimo de log: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR'
94
+ environment: 'development', // 'development' | 'production'
95
+ enableConsole: true, // Habilitar salida en consola
96
+ enableFile: true, // Habilitar escritura en archivo
97
+ filePath: './logs/app.log', // Ruta del archivo de log
98
+ maxFileSize: 10, // Tamaño máximo del archivo en MB (default: 10)
99
+ maxFiles: 5, // Número máximo de archivos de log rotados (default: 5)
100
+ });
101
+ ```
102
+
103
+ **Nota:** La configuración mediante código tiene prioridad sobre las variables de entorno. El orden de prioridad es: `código > variables de entorno > valores por defecto`.
104
+
105
+ ### Configuración para Producción
106
+
107
+ En producción, la consola se deshabilita automáticamente pero los logs se siguen escribiendo en archivo:
108
+
109
+ ```typescript
110
+ const logger = createLogger({
111
+ environment: 'production', // Automáticamente deshabilita consola
112
+ level: 'WARN', // Solo logs de WARN y ERROR en producción
113
+ filePath: './logs/production.log',
114
+ });
115
+ ```
116
+
117
+ O simplemente usando variables de entorno:
118
+ ```bash
119
+ NODE_ENV=production LOGNERD_LEVEL=WARN
120
+ ```
121
+
122
+ ## 🎨 Características
123
+
124
+ - ✅ **Niveles de log**: ERROR, WARN, INFO, DEBUG
125
+ - ✅ **Colores en consola** para desarrollo (rojo para ERROR, amarillo para WARN, cyan para INFO, magenta para DEBUG)
126
+ - ✅ **Escritura automática a archivo** (siempre activa, incluso en producción)
127
+ - ✅ **Deshabilitación automática de consola en producción**
128
+ - ✅ **Rotación automática de archivos** cuando alcanzan el tamaño máximo
129
+ - ✅ **Limpieza automática** de archivos antiguos
130
+ - ✅ **TypeScript** con tipos completos
131
+ - ✅ **Sin dependencias externas** (solo usa módulos nativos de Node.js)
132
+
133
+ ## 📝 Ejemplos
134
+
135
+ ### Ejemplo Completo
136
+
137
+ ```typescript
138
+ import { createLogger } from 'lognerd';
139
+
140
+ const logger = createLogger({
141
+ level: process.env.NODE_ENV === 'production' ? 'WARN' : 'DEBUG',
142
+ environment: process.env.NODE_ENV || 'development',
143
+ filePath: './logs/app.log',
144
+ });
145
+
146
+ // En desarrollo: se muestra en consola con colores y se guarda en archivo
147
+ // En producción: solo se guarda en archivo
148
+
149
+ logger.info('Servidor iniciado en puerto 3000');
150
+ logger.debug('Variables de entorno cargadas', { env: process.env.NODE_ENV });
151
+
152
+ try {
153
+ // Tu código aquí
154
+ logger.info('Operación exitosa');
155
+ } catch (error) {
156
+ logger.error('Error en operación', { error: error.message, stack: error.stack });
157
+ }
158
+ ```
159
+
160
+ ### Actualizar Configuración en Tiempo de Ejecución
161
+
162
+ ```typescript
163
+ const logger = createLogger();
164
+
165
+ // Cambiar el nivel de log dinámicamente
166
+ logger.updateConfig({ level: 'ERROR' });
167
+ ```
168
+
169
+ ## 🔧 API
170
+
171
+ ### `createLogger(config?: Partial<LoggerConfig>): LoggerService`
172
+
173
+ Crea una instancia del logger con la configuración proporcionada.
174
+
175
+ ### Métodos del Logger
176
+
177
+ - `logger.error(message: string, data?: unknown): void` - Log de error
178
+ - `logger.warn(message: string, data?: unknown): void` - Log de advertencia
179
+ - `logger.info(message: string, data?: unknown): void` - Log informativo
180
+ - `logger.debug(message: string, data?: unknown): void` - Log de debug
181
+ - `logger.updateConfig(newConfig: Partial<LoggerConfig>): void` - Actualizar configuración
182
+
183
+ ## 📦 Estructura de Archivos de Log
184
+
185
+ Los logs se guardan en el formato:
186
+
187
+ ```
188
+ 2024-01-15T10:30:45.123Z [ERROR] Error crítico | Data: {"code":500}
189
+ 2024-01-15T10:30:46.456Z [WARN] Advertencia | Data: {"timeout":5000}
190
+ 2024-01-15T10:30:47.789Z [INFO] Operación completada
191
+ ```
192
+
193
+ ## 🔄 Rotación de Archivos
194
+
195
+ Cuando un archivo de log alcanza el tamaño máximo configurado (`maxFileSize`), se renombra automáticamente con un timestamp y se crea un nuevo archivo. Los archivos antiguos se eliminan automáticamente cuando exceden el número máximo configurado (`maxFiles`).
196
+
197
+ ## 📄 Licencia
198
+
199
+ MIT
200
+
201
+ ## 👤 Autor
202
+
203
+ Sergio Olivo O
204
+
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { LoggerService } from './logger/logger.service';
2
+ import { createLoggerConfig } from './logger/logger.config';
3
+ import { LoggerConfig, LogLevel } from './logger/logger.types';
4
+ export declare const createLogger: (config?: Partial<LoggerConfig>) => LoggerService;
5
+ export { LoggerService };
6
+ export type { LoggerConfig, LogLevel };
7
+ export { createLoggerConfig };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,CAAC,YAAY,CAAC,kBAG1D,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLoggerConfig = exports.LoggerService = exports.createLogger = void 0;
4
+ const logger_service_1 = require("./logger/logger.service");
5
+ Object.defineProperty(exports, "LoggerService", { enumerable: true, get: function () { return logger_service_1.LoggerService; } });
6
+ const logger_config_1 = require("./logger/logger.config");
7
+ Object.defineProperty(exports, "createLoggerConfig", { enumerable: true, get: function () { return logger_config_1.createLoggerConfig; } });
8
+ const createLogger = (config) => {
9
+ const loggerConfig = (0, logger_config_1.createLoggerConfig)(config);
10
+ return new logger_service_1.LoggerService(loggerConfig);
11
+ };
12
+ exports.createLogger = createLogger;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAwD;AAS/C,8FATA,8BAAa,OASA;AARtB,0DAA4D;AAUnD,mGAVA,kCAAkB,OAUA;AAPpB,MAAM,YAAY,GAAG,CAAC,MAA8B,EAAE,EAAE;IAC7D,MAAM,YAAY,GAAG,IAAA,kCAAkB,EAAC,MAAM,CAAC,CAAC;IAChD,OAAO,IAAI,8BAAa,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC,CAAC;AAHW,QAAA,YAAY,gBAGvB"}
@@ -0,0 +1,3 @@
1
+ import { LoggerConfig } from './logger.types';
2
+ export declare const createLoggerConfig: (customConfig?: Partial<LoggerConfig>) => LoggerConfig;
3
+ //# sourceMappingURL=logger.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.config.d.ts","sourceRoot":"","sources":["../../src/logger/logger.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAY,MAAM,gBAAgB,CAAC;AAuHxD,eAAO,MAAM,kBAAkB,GAC7B,eAAe,OAAO,CAAC,YAAY,CAAC,KACnC,YA2BF,CAAC"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createLoggerConfig = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Lee una variable de entorno y la convierte a boolean
41
+ * Soporta tanto LOGNERD_* como VITE_LOGNERD_*
42
+ */
43
+ const getEnvBoolean = (key, defaultValue) => {
44
+ const value = getEnvValue(key);
45
+ if (value === undefined)
46
+ return defaultValue;
47
+ return value.toLowerCase() === 'true' || value === '1';
48
+ };
49
+ /**
50
+ * Lee una variable de entorno y la convierte a number
51
+ * Soporta tanto LOGNERD_* como VITE_LOGNERD_*
52
+ */
53
+ const getEnvNumber = (key, defaultValue) => {
54
+ const value = getEnvValue(key);
55
+ if (value === undefined)
56
+ return defaultValue;
57
+ const parsed = parseInt(value, 10);
58
+ return isNaN(parsed) ? defaultValue : parsed;
59
+ };
60
+ /**
61
+ * Lee una variable de entorno y valida que sea un LogLevel válido
62
+ * Soporta tanto LOGNERD_* como VITE_LOGNERD_*
63
+ */
64
+ const getEnvLogLevel = (key, defaultValue) => {
65
+ const value = getEnvValue(key);
66
+ if (value === undefined)
67
+ return defaultValue;
68
+ const upperValue = value.toUpperCase();
69
+ if (['DEBUG', 'INFO', 'WARN', 'ERROR'].includes(upperValue)) {
70
+ return upperValue;
71
+ }
72
+ return defaultValue;
73
+ };
74
+ /**
75
+ * Lee una variable de entorno con soporte para prefijo VITE_
76
+ * Vite solo expone variables que comienzan con VITE_ al código del cliente
77
+ */
78
+ const getEnvValue = (key) => {
79
+ // Primero intentar con prefijo VITE_ (para Vite)
80
+ const viteKey = `VITE_${key}`;
81
+ if (process.env[viteKey] !== undefined) {
82
+ return process.env[viteKey];
83
+ }
84
+ // Luego intentar sin prefijo (para Node.js y otros entornos)
85
+ return process.env[key];
86
+ };
87
+ /**
88
+ * Lee la configuración desde variables de entorno
89
+ * Soporta tanto LOGNERD_* (Node.js) como VITE_LOGNERD_* (Vite)
90
+ */
91
+ const getConfigFromEnv = () => {
92
+ const config = {};
93
+ // Nivel de log
94
+ const levelValue = getEnvValue('LOGNERD_LEVEL');
95
+ if (levelValue) {
96
+ config.level = getEnvLogLevel('LOGNERD_LEVEL', 'INFO');
97
+ }
98
+ // Entorno (compatible con NODE_ENV, LOGNERD_ENVIRONMENT y VITE_LOGNERD_ENVIRONMENT)
99
+ const environment = (getEnvValue('LOGNERD_ENVIRONMENT') ||
100
+ process.env.NODE_ENV ||
101
+ 'development');
102
+ if (environment === 'development' || environment === 'production') {
103
+ config.environment = environment;
104
+ }
105
+ // Habilitar consola
106
+ const enableConsoleValue = getEnvValue('LOGNERD_ENABLE_CONSOLE');
107
+ if (enableConsoleValue !== undefined) {
108
+ config.enableConsole = getEnvBoolean('LOGNERD_ENABLE_CONSOLE', true);
109
+ }
110
+ // Habilitar archivo
111
+ const enableFileValue = getEnvValue('LOGNERD_ENABLE_FILE');
112
+ if (enableFileValue !== undefined) {
113
+ config.enableFile = getEnvBoolean('LOGNERD_ENABLE_FILE', true);
114
+ }
115
+ // Ruta del archivo
116
+ const filePathValue = getEnvValue('LOGNERD_FILE_PATH');
117
+ if (filePathValue) {
118
+ config.filePath = filePathValue;
119
+ }
120
+ // Tamaño máximo del archivo en MB
121
+ const maxFileSizeValue = getEnvValue('LOGNERD_MAX_FILE_SIZE');
122
+ if (maxFileSizeValue !== undefined) {
123
+ config.maxFileSize = getEnvNumber('LOGNERD_MAX_FILE_SIZE', 10);
124
+ }
125
+ // Número máximo de archivos
126
+ const maxFilesValue = getEnvValue('LOGNERD_MAX_FILES');
127
+ if (maxFilesValue !== undefined) {
128
+ config.maxFiles = getEnvNumber('LOGNERD_MAX_FILES', 5);
129
+ }
130
+ return config;
131
+ };
132
+ const defaultConfig = {
133
+ level: 'INFO',
134
+ enableConsole: true,
135
+ enableFile: true,
136
+ filePath: path.join(process.cwd(), 'logs', 'app.log'),
137
+ environment: 'development',
138
+ maxFileSize: 10, // 10MB
139
+ maxFiles: 5,
140
+ };
141
+ const createLoggerConfig = (customConfig) => {
142
+ // Primero leer desde variables de entorno
143
+ const envConfig = getConfigFromEnv();
144
+ // Combinar: defaults -> env -> customConfig (customConfig tiene prioridad)
145
+ const config = {
146
+ ...defaultConfig,
147
+ ...envConfig,
148
+ ...customConfig,
149
+ };
150
+ // En producción, deshabilitar consola pero mantener archivo
151
+ // (solo si no se especificó explícitamente enableConsole)
152
+ if (config.environment === 'production' && customConfig?.enableConsole === undefined && envConfig.enableConsole === undefined) {
153
+ config.enableConsole = false;
154
+ config.enableFile = true;
155
+ }
156
+ // Asegurar que el directorio de logs existe
157
+ if (config.enableFile && config.filePath) {
158
+ const logDir = path.dirname(config.filePath);
159
+ if (!fs.existsSync(logDir)) {
160
+ fs.mkdirSync(logDir, { recursive: true });
161
+ }
162
+ }
163
+ return config;
164
+ };
165
+ exports.createLoggerConfig = createLoggerConfig;
166
+ //# sourceMappingURL=logger.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.config.js","sourceRoot":"","sources":["../../src/logger/logger.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { LoggerConfig } from './logger.types';
2
+ declare class LoggerService {
3
+ private config;
4
+ private logLevels;
5
+ constructor(config: LoggerConfig);
6
+ private shouldLog;
7
+ private writeToFile;
8
+ private rotateLogFileIfNeeded;
9
+ private cleanOldLogFiles;
10
+ private log;
11
+ error(message: string, data?: unknown): void;
12
+ warn(message: string, data?: unknown): void;
13
+ info(message: string, data?: unknown): void;
14
+ debug(message: string, data?: unknown): void;
15
+ updateConfig(newConfig: Partial<LoggerConfig>): void;
16
+ }
17
+ export { LoggerService };
18
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAGlE,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAkD;gBAEvD,MAAM,EAAE,YAAY;IAIhC,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,GAAG;IAqBX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;CAGrD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LoggerService = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const logger_utils_1 = require("./logger.utils");
40
+ class LoggerService {
41
+ constructor(config) {
42
+ this.logLevels = ['DEBUG', 'INFO', 'WARN', 'ERROR'];
43
+ this.config = config;
44
+ }
45
+ shouldLog(level) {
46
+ const currentLevelIndex = this.logLevels.indexOf(this.config.level);
47
+ const messageLevelIndex = this.logLevels.indexOf(level);
48
+ return messageLevelIndex >= currentLevelIndex;
49
+ }
50
+ writeToFile(entry) {
51
+ if (!this.config.enableFile || !this.config.filePath) {
52
+ return;
53
+ }
54
+ try {
55
+ const message = (0, logger_utils_1.formatFileMessage)(entry) + '\n';
56
+ fs.appendFileSync(this.config.filePath, message, 'utf8');
57
+ // Rotación de archivos si es necesario
58
+ this.rotateLogFileIfNeeded();
59
+ }
60
+ catch (error) {
61
+ // Fallback: escribir en consola si falla el archivo
62
+ console.error('Error escribiendo en archivo de log:', error);
63
+ }
64
+ }
65
+ rotateLogFileIfNeeded() {
66
+ if (!this.config.filePath || !this.config.maxFileSize) {
67
+ return;
68
+ }
69
+ try {
70
+ const stats = fs.statSync(this.config.filePath);
71
+ const fileSizeInMB = stats.size / (1024 * 1024);
72
+ if (fileSizeInMB >= this.config.maxFileSize) {
73
+ const logDir = path.dirname(this.config.filePath);
74
+ const logFileName = path.basename(this.config.filePath, '.log');
75
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
76
+ const rotatedFileName = `${logFileName}-${timestamp}.log`;
77
+ const rotatedFilePath = path.join(logDir, rotatedFileName);
78
+ // Mover archivo actual
79
+ fs.renameSync(this.config.filePath, rotatedFilePath);
80
+ // Limpiar archivos antiguos
81
+ this.cleanOldLogFiles(logDir, logFileName);
82
+ }
83
+ }
84
+ catch (error) {
85
+ // Ignorar errores de rotación
86
+ }
87
+ }
88
+ cleanOldLogFiles(logDir, logFileName) {
89
+ if (!this.config.maxFiles) {
90
+ return;
91
+ }
92
+ try {
93
+ const files = fs.readdirSync(logDir)
94
+ .filter(file => file.startsWith(logFileName) && file.endsWith('.log'))
95
+ .map(file => ({
96
+ name: file,
97
+ path: path.join(logDir, file),
98
+ time: fs.statSync(path.join(logDir, file)).mtime.getTime(),
99
+ }))
100
+ .sort((a, b) => b.time - a.time);
101
+ // Eliminar archivos que excedan el máximo
102
+ if (files.length > this.config.maxFiles) {
103
+ files.slice(this.config.maxFiles).forEach(file => {
104
+ fs.unlinkSync(file.path);
105
+ });
106
+ }
107
+ }
108
+ catch (error) {
109
+ // Ignorar errores de limpieza
110
+ }
111
+ }
112
+ log(level, message, data) {
113
+ if (!this.shouldLog(level)) {
114
+ return;
115
+ }
116
+ const entry = {
117
+ timestamp: new Date().toISOString(),
118
+ level,
119
+ message,
120
+ data,
121
+ };
122
+ // Escribir en consola (si está habilitado)
123
+ if (this.config.enableConsole) {
124
+ console.log((0, logger_utils_1.formatConsoleMessage)(level, message, data));
125
+ }
126
+ // Escribir en archivo (siempre, incluso en producción)
127
+ this.writeToFile(entry);
128
+ }
129
+ error(message, data) {
130
+ this.log('ERROR', message, data);
131
+ }
132
+ warn(message, data) {
133
+ this.log('WARN', message, data);
134
+ }
135
+ info(message, data) {
136
+ this.log('INFO', message, data);
137
+ }
138
+ debug(message, data) {
139
+ this.log('DEBUG', message, data);
140
+ }
141
+ updateConfig(newConfig) {
142
+ this.config = { ...this.config, ...newConfig };
143
+ }
144
+ }
145
+ exports.LoggerService = LoggerService;
146
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type LogLevel = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
2
+ export interface LoggerConfig {
3
+ level: LogLevel;
4
+ enableConsole: boolean;
5
+ enableFile: boolean;
6
+ filePath?: string;
7
+ environment: 'development' | 'production';
8
+ maxFileSize?: number;
9
+ maxFiles?: number;
10
+ }
11
+ export interface LogEntry {
12
+ timestamp: string;
13
+ level: LogLevel;
14
+ message: string;
15
+ data?: unknown;
16
+ }
17
+ //# sourceMappingURL=logger.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.types.d.ts","sourceRoot":"","sources":["../../src/logger/logger.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=logger.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.types.js","sourceRoot":"","sources":["../../src/logger/logger.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { LogLevel, LogEntry } from './logger.types';
2
+ export declare const formatConsoleMessage: (level: LogLevel, message: string, data?: unknown) => string;
3
+ export declare const formatFileMessage: (entry: LogEntry) => string;
4
+ export declare const getColorForLevel: (level: LogLevel) => string;
5
+ //# sourceMappingURL=logger.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.utils.d.ts","sourceRoot":"","sources":["../../src/logger/logger.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAUpD,eAAO,MAAM,oBAAoB,GAC/B,OAAO,QAAQ,EACf,SAAS,MAAM,EACf,OAAO,OAAO,KACb,MAaF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,QAAQ,KAAG,MASnD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,QAAQ,KAAG,MAElD,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getColorForLevel = exports.formatFileMessage = exports.formatConsoleMessage = void 0;
4
+ const colors = {
5
+ ERROR: '\x1b[31m', // Rojo
6
+ WARN: '\x1b[33m', // Amarillo
7
+ INFO: '\x1b[36m', // Cyan
8
+ DEBUG: '\x1b[35m', // Magenta
9
+ RESET: '\x1b[0m',
10
+ };
11
+ const formatConsoleMessage = (level, message, data) => {
12
+ const color = colors[level];
13
+ const reset = colors.RESET;
14
+ const timestamp = new Date().toISOString();
15
+ const levelTag = `[${level}]`;
16
+ let output = `${color}${levelTag}${reset} ${timestamp} - ${message}`;
17
+ if (data !== undefined) {
18
+ output += `\n${JSON.stringify(data, null, 2)}`;
19
+ }
20
+ return output;
21
+ };
22
+ exports.formatConsoleMessage = formatConsoleMessage;
23
+ const formatFileMessage = (entry) => {
24
+ const { timestamp, level, message, data } = entry;
25
+ let output = `${timestamp} [${level}] ${message}`;
26
+ if (data !== undefined) {
27
+ output += ` | Data: ${JSON.stringify(data)}`;
28
+ }
29
+ return output;
30
+ };
31
+ exports.formatFileMessage = formatFileMessage;
32
+ const getColorForLevel = (level) => {
33
+ return colors[level];
34
+ };
35
+ exports.getColorForLevel = getColorForLevel;
36
+ //# sourceMappingURL=logger.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.utils.js","sourceRoot":"","sources":["../../src/logger/logger.utils.ts"],"names":[],"mappings":";;;AAEA,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,UAAU,EAAE,OAAO;IAC1B,IAAI,EAAE,UAAU,EAAG,WAAW;IAC9B,IAAI,EAAE,UAAU,EAAG,OAAO;IAC1B,KAAK,EAAE,UAAU,EAAE,UAAU;IAC7B,KAAK,EAAE,SAAS;CACjB,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAClC,KAAe,EACf,OAAe,EACf,IAAc,EACN,EAAE;IACV,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,CAAC;IAE9B,IAAI,MAAM,GAAG,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,IAAI,SAAS,MAAM,OAAO,EAAE,CAAC;IAErE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAe,EAAU,EAAE;IAC3D,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAClD,IAAI,MAAM,GAAG,GAAG,SAAS,KAAK,KAAK,KAAK,OAAO,EAAE,CAAC;IAElD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B;AAEK,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAU,EAAE;IAC1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "lognerd",
3
+ "version": "0.1.0",
4
+ "description": "Sistema de logging con colores y escritura a archivo",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "keywords": [
8
+ "logger",
9
+ "logging",
10
+ "log",
11
+ "file-logger",
12
+ "lognerd"
13
+ ],
14
+ "author": "solivoo",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/solivoo/lognerd.git"
19
+ },
20
+ "homepage": "https://github.com/solivoo/lognerd#readme",
21
+ "bugs": {
22
+ "url": "https://github.com/solivoo/lognerd/issues"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.0.0",
26
+ "ts-node": "^10.9.2",
27
+ "typescript": "^5.0.0"
28
+ },
29
+ "peerDependencies": {
30
+ "typescript": "^5.0.0"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md"
35
+ ],
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "test": "ts-node test-logger.ts",
40
+ "test:env": "ts-node test-env.ts"
41
+ }
42
+ }