winston
Para registrar logs en aplicaciones Node.js y enviarlos a consola, ficheros o servicios externos.
Librería de logging para Node.js con múltiples transportes, niveles y formatos configurables.
Notas y contexto
Qué es
winston es una librería de logging para Node.js, mantenida por la organización winstonjs. Su lema es “a logger for just about everything” y su idea central es separar el registro de logs de su almacenamiento mediante “transportes”: cada transporte es un destino independiente (consola, fichero, HTTP, bases de datos, servicios cloud). Está escrita en JavaScript, incluye tipados de TypeScript y se distribuye bajo licencia MIT.
Para qué sirve
- Registrar mensajes con distintos niveles de severidad en aplicaciones Node.js.
- Enviar los mismos logs a varios destinos a la vez (consola, ficheros, endpoints HTTP).
- Dar formato a los logs (JSON, texto con color, timestamps) mediante el paquete logform.
- Capturar excepciones no controladas y rechazos de promesas sin manejar.
Cuándo usarlo
Es una buena opción cuando necesitas un logger flexible y muy configurable, con un ecosistema amplio de transportes de la comunidad (rotación diaria, servicios externos, bases de datos). Si tu prioridad es el máximo rendimiento y un consumo mínimo de recursos, alternativas como Pino suelen ser más rápidas por su diseño orientado a JSON y procesamiento asíncrono. winston destaca cuando valoras la versatilidad de formatos y destinos por encima del rendimiento puro.
Ejemplo
Instalación:
npm install winston
Uso básico con varios transportes:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
],
});
logger.info('Aplicación iniciada');
logger.error('Algo ha fallado');
Puntos clave
- Arquitectura de transportes: un mismo logger puede escribir en múltiples destinos a la vez.
- Niveles de severidad conformes a RFC5424 (error, warn, info, http, verbose, debug, silly) y niveles personalizados.
- Formatos componibles vía logform: JSON, colores, timestamps, etiquetas, etc.
- Manejo integrado de excepciones no capturadas y rechazos de promesas.
Ten en cuenta
Su flexibilidad tiene un coste en rendimiento: para escenarios de altísimo volumen de logs, opciones como Pino ofrecen mayor velocidad y menor sobrecarga. Es una librería específica para Node.js, no para el navegador. Consulta la documentación oficial para configuraciones avanzadas de transportes y formatos.