npm package: @incentech/logger
Description: Universal logger para Node.js, React, Vite y navegadores - JavaScript puro ESM6
Author: IncenTech
Latest version: 2.3.1

# @incentech/logger

Un logger potente y configurable para aplicaciones Node.js y navegadores con **sistema de filtros avanzado** para control granular de logs.

## 🚀 Características

- 📝 Múltiples niveles de log (error, warn, success, info, debug, trace)
- 🎯 **Sistema de filtros avanzado** con patrones `archivo.funcion`
- 📁 Salida a archivo y consola
- 🎨 Formato bonito con colores (Node.js y navegador)
- 🔒 Escritura segura en archivos (thread-safe)
- 🧪 Compatible con entornos de prueba
- ⚡ Ligero y rápido
- 🔄 Soporta tanto CommonJS como ES modules
- 🌐 Universal: Node.js, React, Vite y navegadores
- 💗 Sistema de heartbit con contadores jerárquicos
- 🔧 Altamente configurable

## Instalación

```bash
npm install @incentech/logger
# o
yarn add @incentech/logger
```

## 🎯 Sistema de Filtros Avanzado (NUEVO)

El logger ahora incluye un potente sistema de filtros que te permite controlar exactamente qué logs se muestran usando patrones de `archivo.funcion`:

### Configuración de filtros

```javascript
import { createLogger } from '@incentech/logger';

const logger = createLogger({
  consolar: [
    "allXXX",              // Modo debug total (equivale a "all")
    "API.all",             // Todos los logs del archivo API
    "all.loginUser",       // Función loginUser en todos los archivos  
    "DATABASE.connect",    // Solo DATABASE.connect específico
    "FLOW.all"             // Todos los logs del archivo FLOW
  ],
  noConsolar: [
    "API.debugInfo",       // No mostrar API.debugInfo (tiene prioridad)
    "nonesTobleronesXXX"   // Archivo completo silenciado
  ]
});
```

### Uso con contexto

```javascript
// Estos logs SÍ se mostrarán (están en consolar)
logger.info("Conectando a BD", "DATABASE", "connect");
logger.success("Login exitoso", "AUTH", "loginUser"); 
logger.debug("Procesando request", "API", "processData");

// Este NO se mostrará (está en noConsolar)
logger.debug("Info detallada", "API", "debugInfo");

// Este NO se mostrará (no está en consolar)
logger.warn("Cache expirado", "CACHE", "cleanup");

// Los errores SIEMPRE se muestran (salvo que estén en noConsolar)
logger.error("Error crítico", "ANY", "anyFunction");
```

### Patrones soportados

- `"all"` - Mostrar todos los logs (modo debug total)
- `"archivo.all"` - Todos los logs de un archivo específico
- `"all.funcion"` - Una función específica en todos los archivos
- `"archivo.funcion"` - Contexto específico
- En `noConsolar` tienen **prioridad** sobre `consolar`

### 💗 Sistema Heartbit

Para debuggear flujos complejos con contadores jerárquicos:

```javascript
logger.heartbit("Inicio del proceso", 0);     // HEARTBIT 1
logger.info("Procesando...", "MAIN", "process");
logger.heartbit("Sub-proceso A", 1);          // HEARTBIT 1.1  
logger.info("Validando...", "VALIDATOR", "check");
logger.heartbit("Sub-proceso B", 1);          // HEARTBIT 1.2
logger.success("Completado", "MAIN", "finish");
logger.heartbit("Nuevo proceso", 0);          // HEARTBIT 2
```

## Instalación

```bash
npm install @incentech/logger
# o
yarn add @incentech/logger
```

## Uso básico

### Importación

```javascript
// Usando ES modules
import { logger, createLogger } from '@incentech/logger';

// O usando CommonJS
const { logger, createLogger } = require('@incentech/logger');
```

### Ejemplo básico (sin filtros)

```javascript
// Uso tradicional sin contexto (compatible con versión anterior)
logger.info('Iniciando la aplicación...');
logger.debug('Modo depuración activado');
logger.success('¡Conexión exitosa con la base de datos!');
logger.warn('El archivo de configuración no existe, usando valores por defecto');
logger.error('Error al procesar la solicitud');
```

### Ejemplo con filtros avanzados

```javascript
// Crear logger con filtros
const apiLogger = createLogger({
  consolar: ["API.all", "DATABASE.connect", "all.authenticate"],
  noConsolar: ["API.debugDetails"]
});

// Logs con contexto archivo.funcion
apiLogger.info("Iniciando API", "API", "start");           // ✅ Se muestra
apiLogger.debug("Detalles internos", "API", "debugDetails"); // ❌ No se muestra  
apiLogger.success("Conexión OK", "DATABASE", "connect");    // ✅ Se muestra
apiLogger.info("Autenticando", "AUTH", "authenticate");     // ✅ Se muestra
```

## Configuración avanzada

### Logger con todas las opciones

```javascript
const loggerPersonalizado = createLogger({
  // 🎯 Sistema de filtros (NUEVO)
  consolar: [
    "API.all",           // Todo el archivo API
    "all.authenticate",  // authenticate en todos los archivos
    "DATABASE.connect"   // Solo DATABASE.connect
  ],
  noConsolar: [
    "API.debugInfo"      // Silenciar este específico
  ],
  
  // 📁 Configuración de archivos (Node.js)
  logDir: './logs',
  logToFile: true,
  separateLogFiles: false,
  logFiles: {
    main: 'mi-aplicacion.log',
    error: 'errores.log',
    info: 'informacion.log',
    debug: 'debug.log',
  },
  
  // 🎨 Presentación
  logToConsole: true,
  colors: true,
  logLevel: 'debug',
  
  // 🏷️ Contexto global
  context: {
    app: 'Mi Aplicación',
    version: '1.0.0',
    ambiente: process.env.NODE_ENV || 'desarrollo',
  },
});
```

### Configuración dinámica

```javascript
// Cambiar filtros en tiempo de ejecución
logger.configure(
  ["all"],              // Consolar: modo debug total
  ["VERBOSE.all"]       // NoConsolar: silenciar módulo verbose
);
```

## 🌐 Compatibilidad Universal

### Node.js
```javascript
import { logger } from '@incentech/logger';
logger.info("Funciona en Node.js", "SERVER", "start");
```

### React/Vite
```javascript
import { logger } from '@incentech/logger';

function MyComponent() {
  logger.debug("Componente renderizado", "MyComponent", "render");
  return <div>Hello</div>;
}
```

### Navegador (UMD)
```html
<script src="node_modules/@incentech/logger/dist/index.umd.js"></script>
<script>
  const { logger } = IncenTechLogger;
  logger.info("Funciona en navegador", "PAGE", "load");
</script>
```

## Niveles de log

El logger soporta los siguientes niveles de log (en orden de severidad):

- `error`: Errores que causan que la aplicación falle
- `warn`: Advertencias sobre situaciones inesperadas
- `success`: Operaciones exitosas
- `info`: Información general de la aplicación
- `debug`: Información detallada para depuración
- `trace`: Trazas detalladas de ejecución

## Uso en pruebas

En entornos de prueba, puedes configurar el logger para que sea menos verboso:

```javascript
const testLogger = createLogger({
  logToConsole: false,
  logToFile: false,
  logLevel: 'error', // Solo muestra errores en pruebas
});
```

O usar el modo de prueba que desactiva la escritura en archivos:

```javascript
process.env.NODE_ENV = 'test';
const { logger } = require('@incentech/logger');
```

## Contribuir

Las contribuciones son bienvenidas. Por favor, lee las [pautas de contribución](CONTRIBUTING.md) para más detalles.

## Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo [LICENSE](LICENSE) para más detalles.
const customLogger = createLogger({
logLevel: 'info', // default: 'info'
logToFile: true, // default: true
logToConsole: true, // default: true
logDir: './logs', // default: './logs'
colors: true // default: true
});

````

### Log Levels

Available log levels (from highest to lowest priority):
- `error` - Errors that need immediate attention
- `warn` - Potentially harmful situations
- `success` - Success messages (custom level)
- `info` - General information
- `debug` - Debug information
- `trace` - Very detailed debug information

## API

### Methods

- `logger.error(message, ...args)`
- `logger.warn(message, ...args)`
- `logger.success(message, ...args)`
- `logger.info(message, ...args)`
- `logger.debug(message, ...args)`
- `logger.trace(message, ...args)`
- `logger.child(options)` - Create a child logger with inherited settings

### Options

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| logLevel | string | 'info' | Minimum log level to output |
| logToFile | boolean | true | Whether to log to files |
| logToConsole | boolean | true | Whether to log to console |
| logDir | string | './logs' | Directory to store log files |
| colors | boolean | true | Enable/disable colored output |

## Advanced Usage

### Child Loggers

Create a child logger with custom settings:

```javascript
const childLogger = logger.child({
  logLevel: 'debug',
  logDir: './debug-logs'
});

childLogger.debug('This will be logged to debug-logs/');
````

### Environment Variables

You can configure the logger using environment variables:

```bash
LOG_LEVEL=debug
LOG_TO_FILE=true
LOG_TO_CONSOLE=true
LOG_DIR=./custom-logs
```

## License

MIT


// 🎯 CAMBIAR NIVEL DE LOG
window.TokeneaLogger.changeLevel('debug');    // debug, info, warn, error, silent
window.TokeneaLogger.changeLevel('silent');   // Silenciar todo

// 🎯 HABILITAR/DESHABILITAR LOGGER
window.TokeneaLogger.toggleEnabled();

// 🎯 VER CONFIGURACIÓN ACTUAL
console.table(window.TokeneaLogger.config);

// 🎯 LIMPIAR TODOS LOS OVERRIDES
window.TokeneaLogger.clearOverrides();

// 🎯 ACCESO DIRECTO AL LOGGER
window.TokeneaLogger.logger.success('¡Hola desde consola!');