lognerd 1.0.1 → 1.0.4
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 +111 -19
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/logger/logger.config.d.ts.map +1 -1
- package/dist/logger/logger.config.js +173 -48
- package/dist/logger/logger.config.js.map +1 -1
- package/dist/logger/logger.service.d.ts.map +1 -1
- package/dist/logger/logger.service.js +56 -45
- package/dist/logger/logger.service.js.map +1 -1
- package/dist/logger/logger.types.d.ts +2 -0
- package/dist/logger/logger.types.d.ts.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# lognerd
|
|
2
2
|
|
|
3
|
-
Sistema de logging con colores y escritura a archivo para Node.js
|
|
3
|
+
Sistema de logging con colores y escritura a archivo para **Node.js (Backend)** y **Navegador (Frontend)**. Desarrollado con TypeScript y diseñado para ser fácil de usar y configurar. Compatible con Vite, Next.js y otros entornos.
|
|
4
4
|
|
|
5
5
|
## 🚀 Instalación
|
|
6
6
|
|
|
@@ -68,18 +68,43 @@ Puedes configurar lognerd completamente mediante variables de entorno. Esto es i
|
|
|
68
68
|
|
|
69
69
|
| Variable (Node.js/Next.js) | Variable (Vite) | Descripción | Valores | Por defecto |
|
|
70
70
|
|----------------------------|-----------------|-------------|---------|-------------|
|
|
71
|
+
| **`LOG_ENVIRONMENT`** | **`VITE_LOG_ENVIRONMENT`** | **Entorno de ejecución (OBLIGATORIO)** | **`B`, `BACKEND`, `C`, `CLIENT`** | **Auto-detecta** |
|
|
71
72
|
| `LOGNERD_LEVEL` | `VITE_LOGNERD_LEVEL` | Nivel mínimo de log | `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
|
72
73
|
| `LOGNERD_ENVIRONMENT` | `VITE_LOGNERD_ENVIRONMENT` | Entorno de ejecución | `development`, `production` | `development` |
|
|
73
74
|
| `NODE_ENV` | `NODE_ENV` | También se puede usar (compatible) | `development`, `production` | - |
|
|
74
75
|
| `LOGNERD_ENABLE_CONSOLE` | `VITE_LOGNERD_ENABLE_CONSOLE` | Habilitar salida en consola | `true`, `false`, `1`, `0` | `true` |
|
|
75
|
-
| `LOGNERD_ENABLE_FILE` | `VITE_LOGNERD_ENABLE_FILE` | Habilitar escritura en archivo | `true`, `false`, `1`, `0` | `true` |
|
|
76
|
+
| `LOGNERD_ENABLE_FILE` | `VITE_LOGNERD_ENABLE_FILE` | Habilitar escritura en archivo | `true`, `false`, `1`, `0` | `true` (solo backend) |
|
|
76
77
|
| `LOGNERD_FILE_PATH` | `VITE_LOGNERD_FILE_PATH` | Ruta del archivo de log | Ruta relativa o absoluta | `./logs/app.log` |
|
|
77
78
|
| `LOGNERD_MAX_FILE_SIZE` | `VITE_LOGNERD_MAX_FILE_SIZE` | Tamaño máximo del archivo en MB | Número entero | `10` |
|
|
78
79
|
| `LOGNERD_MAX_FILES` | `VITE_LOGNERD_MAX_FILES` | Número máximo de archivos rotados | Número entero | `5` |
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
### ⚠️ LOG_ENVIRONMENT (Importante)
|
|
82
|
+
|
|
83
|
+
Esta variable determina si el código se ejecuta en **backend** (Node.js) o **client** (navegador):
|
|
84
|
+
|
|
85
|
+
- **`LOG_ENVIRONMENT=B`** o **`LOG_ENVIRONMENT=BACKEND`**: Para backend (Node.js)
|
|
86
|
+
- ✅ Permite escritura de archivos
|
|
87
|
+
- ✅ Usa `fs` y `path` de Node.js
|
|
88
|
+
- ✅ Escritura de logs en archivos locales
|
|
89
|
+
|
|
90
|
+
- **`LOG_ENVIRONMENT=C`** o **`LOG_ENVIRONMENT=CLIENT`**: Para cliente (navegador)
|
|
91
|
+
- ✅ Deshabilita escritura de archivos automáticamente
|
|
92
|
+
- ✅ Solo muestra logs en consola del navegador
|
|
93
|
+
- ✅ Compatible con Vite y otros bundlers
|
|
94
|
+
|
|
95
|
+
**Detección automática:**
|
|
96
|
+
Si no se configura `LOG_ENVIRONMENT`, se detecta automáticamente:
|
|
97
|
+
- Si está en Node.js → `backend`
|
|
98
|
+
- Si está en navegador → `client`
|
|
99
|
+
|
|
100
|
+
**Mensajes de error claros:**
|
|
101
|
+
- Si `LOG_ENVIRONMENT=B` pero se ejecuta en navegador → Error descriptivo
|
|
102
|
+
- Si `LOG_ENVIRONMENT=C` pero se intenta escribir archivos → Advertencia automática
|
|
103
|
+
|
|
104
|
+
**Ejemplo para Node.js/Next.js (Backend):**
|
|
81
105
|
```bash
|
|
82
106
|
# .env
|
|
107
|
+
LOG_ENVIRONMENT=B
|
|
83
108
|
LOGNERD_LEVEL=INFO
|
|
84
109
|
LOGNERD_ENVIRONMENT=development
|
|
85
110
|
LOGNERD_ENABLE_CONSOLE=true
|
|
@@ -89,26 +114,34 @@ LOGNERD_MAX_FILE_SIZE=10
|
|
|
89
114
|
LOGNERD_MAX_FILES=5
|
|
90
115
|
```
|
|
91
116
|
|
|
92
|
-
**Ejemplo para Vite:**
|
|
117
|
+
**Ejemplo para Vite (Cliente/Navegador):**
|
|
93
118
|
```bash
|
|
94
119
|
# .env
|
|
120
|
+
VITE_LOG_ENVIRONMENT=C
|
|
95
121
|
VITE_LOGNERD_LEVEL=INFO
|
|
96
122
|
VITE_LOGNERD_ENVIRONMENT=development
|
|
97
123
|
VITE_LOGNERD_ENABLE_CONSOLE=true
|
|
98
|
-
VITE_LOGNERD_ENABLE_FILE
|
|
99
|
-
VITE_LOGNERD_FILE_PATH=./logs/app.log
|
|
100
|
-
VITE_LOGNERD_MAX_FILE_SIZE=10
|
|
101
|
-
VITE_LOGNERD_MAX_FILES=5
|
|
124
|
+
# VITE_LOGNERD_ENABLE_FILE se ignora en cliente (siempre false)
|
|
102
125
|
```
|
|
103
126
|
|
|
104
|
-
**Ejemplo para producción (Vite):**
|
|
127
|
+
**Ejemplo para producción (Vite - Cliente):**
|
|
105
128
|
```bash
|
|
106
129
|
# .env.production
|
|
130
|
+
VITE_LOG_ENVIRONMENT=C
|
|
107
131
|
VITE_LOGNERD_LEVEL=WARN
|
|
108
132
|
VITE_LOGNERD_ENVIRONMENT=production
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
133
|
+
# La escritura de archivos está deshabilitada en cliente
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Ejemplo para producción (Backend):**
|
|
137
|
+
```bash
|
|
138
|
+
# .env.production
|
|
139
|
+
LOG_ENVIRONMENT=B
|
|
140
|
+
LOGNERD_LEVEL=WARN
|
|
141
|
+
LOGNERD_ENVIRONMENT=production
|
|
142
|
+
LOGNERD_FILE_PATH=./logs/production.log
|
|
143
|
+
LOGNERD_MAX_FILE_SIZE=50
|
|
144
|
+
LOGNERD_MAX_FILES=10
|
|
112
145
|
```
|
|
113
146
|
|
|
114
147
|
### Configuración mediante Código
|
|
@@ -118,15 +151,25 @@ También puedes configurar el logger mediante código TypeScript:
|
|
|
118
151
|
```typescript
|
|
119
152
|
import { createLogger } from 'lognerd';
|
|
120
153
|
|
|
121
|
-
|
|
154
|
+
// Para backend
|
|
155
|
+
const backendLogger = createLogger({
|
|
156
|
+
runtimeEnvironment: 'backend', // o 'client' para navegador
|
|
122
157
|
level: 'DEBUG', // Nivel mínimo de log: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR'
|
|
123
158
|
environment: 'development', // 'development' | 'production'
|
|
124
159
|
enableConsole: true, // Habilitar salida en consola
|
|
125
|
-
enableFile: true, // Habilitar escritura en archivo
|
|
160
|
+
enableFile: true, // Habilitar escritura en archivo (solo backend)
|
|
126
161
|
filePath: './logs/app.log', // Ruta del archivo de log
|
|
127
162
|
maxFileSize: 10, // Tamaño máximo del archivo en MB (default: 10)
|
|
128
163
|
maxFiles: 5, // Número máximo de archivos de log rotados (default: 5)
|
|
129
164
|
});
|
|
165
|
+
|
|
166
|
+
// Para cliente (navegador)
|
|
167
|
+
const clientLogger = createLogger({
|
|
168
|
+
runtimeEnvironment: 'client',
|
|
169
|
+
level: 'INFO',
|
|
170
|
+
enableConsole: true,
|
|
171
|
+
enableFile: false, // Se deshabilita automáticamente en cliente
|
|
172
|
+
});
|
|
130
173
|
```
|
|
131
174
|
|
|
132
175
|
**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`.
|
|
@@ -150,24 +193,31 @@ NODE_ENV=production LOGNERD_LEVEL=WARN
|
|
|
150
193
|
|
|
151
194
|
## 🎨 Características
|
|
152
195
|
|
|
196
|
+
- ✅ **Soporte Backend y Frontend**: Funciona en Node.js y navegador
|
|
153
197
|
- ✅ **Niveles de log**: ERROR, WARN, INFO, DEBUG
|
|
154
198
|
- ✅ **Colores en consola** para desarrollo (rojo para ERROR, amarillo para WARN, cyan para INFO, magenta para DEBUG)
|
|
155
|
-
- ✅ **Escritura automática a archivo** (
|
|
199
|
+
- ✅ **Escritura automática a archivo** (solo en backend, deshabilitada automáticamente en cliente)
|
|
200
|
+
- ✅ **Detección automática de entorno** (backend/client) o configuración manual con `LOG_ENVIRONMENT`
|
|
201
|
+
- ✅ **Mensajes de error claros** cuando hay configuración incorrecta
|
|
156
202
|
- ✅ **Deshabilitación automática de consola en producción**
|
|
157
|
-
- ✅ **Rotación automática de archivos** cuando alcanzan el tamaño máximo
|
|
158
|
-
- ✅ **Limpieza automática** de archivos antiguos
|
|
203
|
+
- ✅ **Rotación automática de archivos** cuando alcanzan el tamaño máximo (solo backend)
|
|
204
|
+
- ✅ **Limpieza automática** de archivos antiguos (solo backend)
|
|
205
|
+
- ✅ **Patrón Singleton**: Uso directo sin crear instancias
|
|
159
206
|
- ✅ **TypeScript** con tipos completos
|
|
160
|
-
- ✅ **Sin dependencias externas** (solo usa módulos nativos
|
|
207
|
+
- ✅ **Sin dependencias externas** (solo usa módulos nativos)
|
|
208
|
+
- ✅ **Compatible con Vite**: Soporte para variables `VITE_*`
|
|
161
209
|
|
|
162
210
|
## 📝 Ejemplos
|
|
163
211
|
|
|
164
|
-
### Ejemplo Completo
|
|
212
|
+
### Ejemplo Completo (Backend)
|
|
165
213
|
|
|
166
214
|
```typescript
|
|
167
215
|
import { info, warn, error, debug, configureLogger } from 'lognerd';
|
|
168
216
|
|
|
169
217
|
// Configurar el logger (opcional, se configura automáticamente desde variables de entorno)
|
|
218
|
+
// LOG_ENVIRONMENT=B debe estar en .env
|
|
170
219
|
configureLogger({
|
|
220
|
+
runtimeEnvironment: 'backend',
|
|
171
221
|
level: process.env.NODE_ENV === 'production' ? 'WARN' : 'DEBUG',
|
|
172
222
|
environment: process.env.NODE_ENV || 'development',
|
|
173
223
|
filePath: './logs/app.log',
|
|
@@ -187,6 +237,26 @@ try {
|
|
|
187
237
|
}
|
|
188
238
|
```
|
|
189
239
|
|
|
240
|
+
### Ejemplo Completo (Frontend/Vite)
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
import { info, warn, error, debug } from 'lognerd';
|
|
244
|
+
|
|
245
|
+
// En .env: VITE_LOG_ENVIRONMENT=C
|
|
246
|
+
// No necesitas configurar nada, se detecta automáticamente
|
|
247
|
+
|
|
248
|
+
info('Aplicación iniciada');
|
|
249
|
+
debug('Estado de la aplicación', { users: 10, active: true });
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
// Tu código aquí
|
|
253
|
+
info('Operación exitosa');
|
|
254
|
+
} catch (err) {
|
|
255
|
+
error('Error en operación', { error: err.message });
|
|
256
|
+
// Los logs solo se muestran en consola del navegador
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
190
260
|
### Actualizar Configuración en Tiempo de Ejecución
|
|
191
261
|
|
|
192
262
|
```typescript
|
|
@@ -256,6 +326,28 @@ Los logs se guardan en el formato:
|
|
|
256
326
|
|
|
257
327
|
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`).
|
|
258
328
|
|
|
329
|
+
**Nota:** La rotación de archivos solo funciona en **backend** (Node.js). En **cliente** (navegador), la escritura de archivos está deshabilitada.
|
|
330
|
+
|
|
331
|
+
## 🐛 Solución de Problemas
|
|
332
|
+
|
|
333
|
+
### Error: "process is not defined"
|
|
334
|
+
- **Causa**: El código se está ejecutando en el navegador sin configurar `LOG_ENVIRONMENT=C`
|
|
335
|
+
- **Solución**: Agrega `VITE_LOG_ENVIRONMENT=C` en tu archivo `.env` para Vite, o `LOG_ENVIRONMENT=C` para otros entornos
|
|
336
|
+
|
|
337
|
+
### Error: "LOG_ENVIRONMENT está configurado para BACKEND pero se ejecuta en navegador"
|
|
338
|
+
- **Causa**: `LOG_ENVIRONMENT=B` está configurado pero el código corre en el navegador
|
|
339
|
+
- **Solución**: Cambia a `LOG_ENVIRONMENT=C` o `VITE_LOG_ENVIRONMENT=C` en tu `.env`
|
|
340
|
+
|
|
341
|
+
### Los archivos de log no se crean
|
|
342
|
+
- **Causa**: Estás en cliente (navegador) o `LOG_ENVIRONMENT=C`
|
|
343
|
+
- **Solución**:
|
|
344
|
+
- Para backend: Configura `LOG_ENVIRONMENT=B` y asegúrate de tener permisos de escritura
|
|
345
|
+
- Para cliente: Es normal, los archivos no se pueden crear en el navegador
|
|
346
|
+
|
|
347
|
+
### Variables de entorno no se leen en Vite
|
|
348
|
+
- **Causa**: Falta el prefijo `VITE_` en las variables
|
|
349
|
+
- **Solución**: Usa `VITE_LOG_ENVIRONMENT`, `VITE_LOGNERD_LEVEL`, etc.
|
|
350
|
+
|
|
259
351
|
## 📄 Licencia
|
|
260
352
|
|
|
261
353
|
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LoggerService } from './logger/logger.service';
|
|
2
2
|
import { createLoggerConfig } from './logger/logger.config';
|
|
3
|
-
import { LoggerConfig, LogLevel } from './logger/logger.types';
|
|
3
|
+
import { LoggerConfig, LogLevel, RuntimeEnvironment } from './logger/logger.types';
|
|
4
4
|
/**
|
|
5
5
|
* Crea una nueva instancia del logger con configuración personalizada
|
|
6
6
|
*/
|
|
@@ -21,6 +21,6 @@ export declare const logger: {
|
|
|
21
21
|
updateConfig: (config: Partial<LoggerConfig>) => void;
|
|
22
22
|
};
|
|
23
23
|
export { LoggerService };
|
|
24
|
-
export type { LoggerConfig, LogLevel };
|
|
24
|
+
export type { LoggerConfig, LogLevel, RuntimeEnvironment };
|
|
25
25
|
export { createLoggerConfig };
|
|
26
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAgBnF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,CAAC,YAAY,CAAC,kBAG1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO,CAAC,YAAY,CAAC,KAAG,IAK/D,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,KAAG,IAEtD,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,KAAG,IAEtD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,KAAG,IAEvD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,KAAG,IAEvD,CAAC;AAGF,eAAO,MAAM,MAAM;oBAjBW,MAAM,SAAS,OAAO,KAAG,IAAI;oBAI7B,MAAM,SAAS,OAAO,KAAG,IAAI;qBAI5B,MAAM,SAAS,OAAO,KAAG,IAAI;qBAI7B,MAAM,SAAS,OAAO,KAAG,IAAI;2BAUnC,OAAO,CAAC,YAAY,CAAC;CAC7C,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +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;
|
|
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;AA2PxD,eAAO,MAAM,kBAAkB,GAC7B,eAAe,OAAO,CAAC,YAAY,CAAC,KACnC,YAgEF,CAAC"}
|
|
@@ -1,41 +1,71 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.createLoggerConfig = void 0;
|
|
37
|
-
|
|
38
|
-
const
|
|
4
|
+
// Detectar si estamos en Node.js o en el navegador
|
|
5
|
+
const isNode = typeof process !== 'undefined' && process.versions?.node !== undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Detecta el entorno de ejecución (backend o client)
|
|
8
|
+
* Basado en LOG_ENVIRONMENT o detección automática
|
|
9
|
+
*/
|
|
10
|
+
const detectRuntimeEnvironment = () => {
|
|
11
|
+
// Intentar leer LOG_ENVIRONMENT desde variables de entorno
|
|
12
|
+
let envValue;
|
|
13
|
+
try {
|
|
14
|
+
if (typeof process !== 'undefined' && process.env) {
|
|
15
|
+
envValue = process.env.LOG_ENVIRONMENT || process.env.VITE_LOG_ENVIRONMENT;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// process no disponible
|
|
20
|
+
}
|
|
21
|
+
// Si no está en process.env, intentar desde Vite
|
|
22
|
+
if (!envValue && !isNode) {
|
|
23
|
+
envValue = getViteEnv('LOG_ENVIRONMENT');
|
|
24
|
+
}
|
|
25
|
+
// Procesar el valor
|
|
26
|
+
if (envValue) {
|
|
27
|
+
const upperValue = envValue.trim().toUpperCase();
|
|
28
|
+
if (upperValue === 'B' || upperValue === 'BACKEND') {
|
|
29
|
+
return 'backend';
|
|
30
|
+
}
|
|
31
|
+
if (upperValue === 'C' || upperValue === 'CLIENT' || upperValue === 'CLIENTE') {
|
|
32
|
+
return 'client';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Detección automática: si estamos en Node.js, asumimos backend
|
|
36
|
+
// Si no, asumimos client (navegador)
|
|
37
|
+
return isNode ? 'backend' : 'client';
|
|
38
|
+
};
|
|
39
|
+
// Función para obtener variables de entorno de Vite en tiempo de ejecución
|
|
40
|
+
// Vite inyecta import.meta.env en tiempo de compilación
|
|
41
|
+
const getViteEnv = (key) => {
|
|
42
|
+
try {
|
|
43
|
+
// Acceder a import.meta.env de forma segura
|
|
44
|
+
// En Vite, esto se reemplaza en tiempo de compilación
|
|
45
|
+
const meta = globalThis.__VITE_IMPORT_META__ ||
|
|
46
|
+
(typeof globalThis.import !== 'undefined' ?
|
|
47
|
+
globalThis.import.meta : null);
|
|
48
|
+
if (meta && meta.env && meta.env[key] !== undefined) {
|
|
49
|
+
return String(meta.env[key]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Ignorar errores - no estamos en Vite o no está disponible
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
};
|
|
57
|
+
// Importaciones condicionales solo para Node.js
|
|
58
|
+
let fs = null;
|
|
59
|
+
let path = null;
|
|
60
|
+
if (isNode) {
|
|
61
|
+
try {
|
|
62
|
+
fs = require('fs');
|
|
63
|
+
path = require('path');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Ignorar si no están disponibles
|
|
67
|
+
}
|
|
68
|
+
}
|
|
39
69
|
/**
|
|
40
70
|
* Lee una variable de entorno y la convierte a boolean
|
|
41
71
|
* Soporta tanto LOGNERD_* como VITE_LOGNERD_*
|
|
@@ -76,13 +106,44 @@ const getEnvLogLevel = (key, defaultValue) => {
|
|
|
76
106
|
* Vite solo expone variables que comienzan con VITE_ al código del cliente
|
|
77
107
|
*/
|
|
78
108
|
const getEnvValue = (key) => {
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
109
|
+
// Verificar si process existe antes de usarlo (evita errores en navegador)
|
|
110
|
+
let processEnv;
|
|
111
|
+
try {
|
|
112
|
+
if (typeof process !== 'undefined' && process.env) {
|
|
113
|
+
processEnv = process.env;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// process no está disponible (estamos en navegador)
|
|
118
|
+
processEnv = undefined;
|
|
83
119
|
}
|
|
84
|
-
//
|
|
85
|
-
|
|
120
|
+
// Para Node.js
|
|
121
|
+
if (isNode && processEnv) {
|
|
122
|
+
// Primero intentar con prefijo VITE_ (por si acaso)
|
|
123
|
+
const viteKey = `VITE_${key}`;
|
|
124
|
+
if (processEnv[viteKey] !== undefined) {
|
|
125
|
+
return processEnv[viteKey];
|
|
126
|
+
}
|
|
127
|
+
// Luego intentar sin prefijo
|
|
128
|
+
if (processEnv[key] !== undefined) {
|
|
129
|
+
return processEnv[key];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Para Vite (navegador) - intentar obtener variables de Vite
|
|
133
|
+
// Solo si no estamos en Node.js
|
|
134
|
+
if (!isNode) {
|
|
135
|
+
const viteKey = `VITE_${key}`;
|
|
136
|
+
const viteValue = getViteEnv(viteKey);
|
|
137
|
+
if (viteValue !== undefined) {
|
|
138
|
+
return String(viteValue);
|
|
139
|
+
}
|
|
140
|
+
// También intentar sin prefijo
|
|
141
|
+
const directValue = getViteEnv(key);
|
|
142
|
+
if (directValue !== undefined) {
|
|
143
|
+
return String(directValue);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
86
147
|
};
|
|
87
148
|
/**
|
|
88
149
|
* Lee la configuración desde variables de entorno
|
|
@@ -96,8 +157,22 @@ const getConfigFromEnv = () => {
|
|
|
96
157
|
config.level = getEnvLogLevel('LOGNERD_LEVEL', 'INFO');
|
|
97
158
|
}
|
|
98
159
|
// Entorno (compatible con NODE_ENV, LOGNERD_ENVIRONMENT y VITE_LOGNERD_ENVIRONMENT)
|
|
160
|
+
let nodeEnv;
|
|
161
|
+
try {
|
|
162
|
+
if (!isNode) {
|
|
163
|
+
// En el navegador, intentar obtener de Vite
|
|
164
|
+
nodeEnv = getViteEnv('MODE') || getViteEnv('NODE_ENV');
|
|
165
|
+
}
|
|
166
|
+
else if (typeof process !== 'undefined' && process.env) {
|
|
167
|
+
nodeEnv = process.env.NODE_ENV;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Ignorar errores si process no está disponible
|
|
172
|
+
nodeEnv = undefined;
|
|
173
|
+
}
|
|
99
174
|
const environment = (getEnvValue('LOGNERD_ENVIRONMENT') ||
|
|
100
|
-
|
|
175
|
+
nodeEnv ||
|
|
101
176
|
'development');
|
|
102
177
|
if (environment === 'development' || environment === 'production') {
|
|
103
178
|
config.environment = environment;
|
|
@@ -129,36 +204,86 @@ const getConfigFromEnv = () => {
|
|
|
129
204
|
}
|
|
130
205
|
return config;
|
|
131
206
|
};
|
|
207
|
+
// Obtener el directorio de trabajo (solo en Node.js)
|
|
208
|
+
const getDefaultFilePath = () => {
|
|
209
|
+
if (isNode && path) {
|
|
210
|
+
try {
|
|
211
|
+
if (typeof process !== 'undefined' && process.cwd) {
|
|
212
|
+
return path.join(process.cwd(), 'logs', 'app.log');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Fallback si process.cwd() no está disponible
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// En el navegador, no podemos escribir archivos, así que retornamos una ruta relativa
|
|
220
|
+
return './logs/app.log';
|
|
221
|
+
};
|
|
132
222
|
const defaultConfig = {
|
|
133
223
|
level: 'INFO',
|
|
134
224
|
enableConsole: true,
|
|
135
225
|
enableFile: true,
|
|
136
|
-
filePath:
|
|
226
|
+
filePath: getDefaultFilePath(),
|
|
137
227
|
environment: 'development',
|
|
228
|
+
runtimeEnvironment: 'backend', // Se sobrescribirá con detectRuntimeEnvironment()
|
|
138
229
|
maxFileSize: 10, // 10MB
|
|
139
230
|
maxFiles: 5,
|
|
140
231
|
};
|
|
141
232
|
const createLoggerConfig = (customConfig) => {
|
|
233
|
+
// Detectar el entorno de ejecución primero
|
|
234
|
+
const runtimeEnv = detectRuntimeEnvironment();
|
|
142
235
|
// Primero leer desde variables de entorno
|
|
143
236
|
const envConfig = getConfigFromEnv();
|
|
144
237
|
// Combinar: defaults -> env -> customConfig (customConfig tiene prioridad)
|
|
145
238
|
const config = {
|
|
146
239
|
...defaultConfig,
|
|
240
|
+
runtimeEnvironment: runtimeEnv,
|
|
147
241
|
...envConfig,
|
|
148
242
|
...customConfig,
|
|
149
243
|
};
|
|
244
|
+
// Validar y ajustar según el entorno de ejecución
|
|
245
|
+
if (config.runtimeEnvironment === 'client') {
|
|
246
|
+
// En cliente (navegador), deshabilitar escritura de archivos
|
|
247
|
+
if (config.enableFile) {
|
|
248
|
+
console.warn('[lognerd] ⚠️ LOG_ENVIRONMENT está configurado para CLIENT (C). ' +
|
|
249
|
+
'La escritura de archivos está deshabilitada en el navegador. ' +
|
|
250
|
+
'Configure LOG_ENVIRONMENT=B para backend si necesita escribir archivos.');
|
|
251
|
+
config.enableFile = false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (config.runtimeEnvironment === 'backend') {
|
|
255
|
+
// En backend, asegurar que tenemos acceso a fs
|
|
256
|
+
if (config.enableFile && !isNode) {
|
|
257
|
+
console.error('[lognerd] ❌ ERROR: LOG_ENVIRONMENT está configurado para BACKEND (B) ' +
|
|
258
|
+
'pero el código se está ejecutando en el navegador. ' +
|
|
259
|
+
'Configure LOG_ENVIRONMENT=C para cliente o corrija su configuración.');
|
|
260
|
+
config.enableFile = false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
150
263
|
// En producción, deshabilitar consola pero mantener archivo
|
|
151
264
|
// (solo si no se especificó explícitamente enableConsole)
|
|
152
265
|
if (config.environment === 'production' && customConfig?.enableConsole === undefined && envConfig.enableConsole === undefined) {
|
|
153
266
|
config.enableConsole = false;
|
|
154
267
|
config.enableFile = true;
|
|
155
268
|
}
|
|
156
|
-
// Asegurar que el directorio de logs existe
|
|
157
|
-
if (config.enableFile && config.filePath) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
fs.
|
|
269
|
+
// Asegurar que el directorio de logs existe (solo en Node.js)
|
|
270
|
+
if (config.enableFile && config.filePath && isNode && fs && path) {
|
|
271
|
+
try {
|
|
272
|
+
const logDir = path.dirname(config.filePath);
|
|
273
|
+
if (!fs.existsSync(logDir)) {
|
|
274
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
275
|
+
}
|
|
161
276
|
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
// En el navegador, no podemos crear directorios, así que deshabilitamos el archivo
|
|
279
|
+
if (!isNode) {
|
|
280
|
+
config.enableFile = false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else if (!isNode && config.enableFile) {
|
|
285
|
+
// En el navegador, deshabilitar escritura en archivo por defecto
|
|
286
|
+
config.enableFile = false;
|
|
162
287
|
}
|
|
163
288
|
return config;
|
|
164
289
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.config.js","sourceRoot":"","sources":["../../src/logger/logger.config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.config.js","sourceRoot":"","sources":["../../src/logger/logger.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAmBlE,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAkD;gBAEvD,MAAM,EAAE,YAAY;IAIhC,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,GAAG;IAkCX,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"}
|
|
@@ -1,42 +1,21 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.LoggerService = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
4
|
const logger_utils_1 = require("./logger.utils");
|
|
5
|
+
// Detectar si estamos en Node.js
|
|
6
|
+
const isNode = typeof process !== 'undefined' && process.versions?.node !== undefined;
|
|
7
|
+
// Importaciones condicionales solo para Node.js
|
|
8
|
+
let fs = null;
|
|
9
|
+
let path = null;
|
|
10
|
+
if (isNode) {
|
|
11
|
+
try {
|
|
12
|
+
fs = require('fs');
|
|
13
|
+
path = require('path');
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Ignorar si no están disponibles
|
|
17
|
+
}
|
|
18
|
+
}
|
|
40
19
|
class LoggerService {
|
|
41
20
|
constructor(config) {
|
|
42
21
|
this.logLevels = ['DEBUG', 'INFO', 'WARN', 'ERROR'];
|
|
@@ -51,6 +30,19 @@ class LoggerService {
|
|
|
51
30
|
if (!this.config.enableFile || !this.config.filePath) {
|
|
52
31
|
return;
|
|
53
32
|
}
|
|
33
|
+
// Validar que estamos en backend antes de escribir
|
|
34
|
+
if (this.config.runtimeEnvironment === 'client') {
|
|
35
|
+
// No intentar escribir en cliente
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// En el navegador, no podemos escribir archivos
|
|
39
|
+
if (!isNode || !fs) {
|
|
40
|
+
if (this.config.runtimeEnvironment === 'backend') {
|
|
41
|
+
console.error('[lognerd] ❌ ERROR: Intento de escribir archivo en backend pero fs no está disponible. ' +
|
|
42
|
+
'Verifique que LOG_ENVIRONMENT=B esté configurado correctamente.');
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
54
46
|
try {
|
|
55
47
|
const message = (0, logger_utils_1.formatFileMessage)(entry) + '\n';
|
|
56
48
|
fs.appendFileSync(this.config.filePath, message, 'utf8');
|
|
@@ -63,13 +55,13 @@ class LoggerService {
|
|
|
63
55
|
}
|
|
64
56
|
}
|
|
65
57
|
rotateLogFileIfNeeded() {
|
|
66
|
-
if (!this.config.filePath || !this.config.maxFileSize) {
|
|
58
|
+
if (!this.config.filePath || !this.config.maxFileSize || !isNode || !fs || !path) {
|
|
67
59
|
return;
|
|
68
60
|
}
|
|
69
61
|
try {
|
|
70
62
|
const stats = fs.statSync(this.config.filePath);
|
|
71
63
|
const fileSizeInMB = stats.size / (1024 * 1024);
|
|
72
|
-
if (fileSizeInMB >= this.config.maxFileSize) {
|
|
64
|
+
if (fileSizeInMB >= this.config.maxFileSize && path && fs) {
|
|
73
65
|
const logDir = path.dirname(this.config.filePath);
|
|
74
66
|
const logFileName = path.basename(this.config.filePath, '.log');
|
|
75
67
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
@@ -86,22 +78,27 @@ class LoggerService {
|
|
|
86
78
|
}
|
|
87
79
|
}
|
|
88
80
|
cleanOldLogFiles(logDir, logFileName) {
|
|
89
|
-
if (!this.config.maxFiles) {
|
|
81
|
+
if (!this.config.maxFiles || !isNode || !fs || !path) {
|
|
90
82
|
return;
|
|
91
83
|
}
|
|
92
84
|
try {
|
|
93
85
|
const files = fs.readdirSync(logDir)
|
|
94
86
|
.filter(file => file.startsWith(logFileName) && file.endsWith('.log'))
|
|
95
|
-
.map(file =>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
87
|
+
.map(file => {
|
|
88
|
+
const filePath = path && path.join(logDir, file);
|
|
89
|
+
return {
|
|
90
|
+
name: file,
|
|
91
|
+
path: filePath,
|
|
92
|
+
time: fs && filePath ? fs.statSync(filePath).mtime.getTime() : 0,
|
|
93
|
+
};
|
|
94
|
+
})
|
|
100
95
|
.sort((a, b) => b.time - a.time);
|
|
101
96
|
// Eliminar archivos que excedan el máximo
|
|
102
97
|
if (files.length > this.config.maxFiles) {
|
|
103
98
|
files.slice(this.config.maxFiles).forEach(file => {
|
|
104
|
-
fs
|
|
99
|
+
if (fs && file.path) {
|
|
100
|
+
fs.unlinkSync(file.path);
|
|
101
|
+
}
|
|
105
102
|
});
|
|
106
103
|
}
|
|
107
104
|
}
|
|
@@ -121,7 +118,21 @@ class LoggerService {
|
|
|
121
118
|
};
|
|
122
119
|
// Escribir en consola (si está habilitado)
|
|
123
120
|
if (this.config.enableConsole) {
|
|
124
|
-
|
|
121
|
+
// En web, usar console nativo con objetos expandibles
|
|
122
|
+
if (!isNode) {
|
|
123
|
+
const levelTag = `[${level}]`;
|
|
124
|
+
// Usar console.log con múltiples parámetros para mantener objetos expandibles
|
|
125
|
+
if (data !== undefined) {
|
|
126
|
+
console.log(`${levelTag} ${message}`, data);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
console.log(`${levelTag} ${message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// En Node.js, usar el formato con colores
|
|
134
|
+
console.log((0, logger_utils_1.formatConsoleMessage)(level, message, data));
|
|
135
|
+
}
|
|
125
136
|
}
|
|
126
137
|
// Escribir en archivo (siempre, incluso en producción)
|
|
127
138
|
this.writeToFile(entry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/logger/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export type LogLevel = 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
|
|
2
|
+
export type RuntimeEnvironment = 'backend' | 'client';
|
|
2
3
|
export interface LoggerConfig {
|
|
3
4
|
level: LogLevel;
|
|
4
5
|
enableConsole: boolean;
|
|
5
6
|
enableFile: boolean;
|
|
6
7
|
filePath?: string;
|
|
7
8
|
environment: 'development' | 'production';
|
|
9
|
+
runtimeEnvironment: RuntimeEnvironment;
|
|
8
10
|
maxFileSize?: number;
|
|
9
11
|
maxFiles?: number;
|
|
10
12
|
}
|
|
@@ -1 +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;
|
|
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;AAC3D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD,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,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lognerd",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Sistema de logging con colores y escritura a archivo",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"prepublishOnly": "pnpm run build",
|
|
10
|
+
"dev": "tsc --watch",
|
|
11
|
+
"test": "ts-node test-logger.ts",
|
|
12
|
+
"test:env": "ts-node test-env.ts",
|
|
13
|
+
"test:singleton": "ts-node test-singleton.ts"
|
|
14
|
+
},
|
|
7
15
|
"keywords": [
|
|
8
16
|
"logger",
|
|
9
17
|
"logging",
|
|
@@ -35,12 +43,5 @@
|
|
|
35
43
|
"files": [
|
|
36
44
|
"dist",
|
|
37
45
|
"README.md"
|
|
38
|
-
]
|
|
39
|
-
"scripts": {
|
|
40
|
-
"build": "tsc",
|
|
41
|
-
"dev": "tsc --watch",
|
|
42
|
-
"test": "ts-node test-logger.ts",
|
|
43
|
-
"test:env": "ts-node test-env.ts",
|
|
44
|
-
"test:singleton": "ts-node test-singleton.ts"
|
|
45
|
-
}
|
|
46
|
+
]
|
|
46
47
|
}
|