¿Qué es winston y para qué sirve?
Winston es la biblioteca de logging más popular en el entorno Node.js. Proporciona una API simple y universal que permite registrar logs con diferentes niveles de importancia, formatearlos y enviarlos a diferentes destinos (consola, archivos, bases de datos, servicios externos). A diferencia del simple console.log, winston te da control total sobre el logging: puedes configurar la rotación de logs por tamaño o fecha, filtrar mensajes por nivel (info, warn, error, debug), añadir metadatos (hora, ID de solicitud) e incluso usar múltiples transportes simultáneamente. Es una herramienta indispensable para monitoreo, depuración y auditoría en aplicaciones en producción.
Instalación
Instala winston a través de npm o yarn:
npm install winston# oyarn add winstonFunciones principales
- Niveles de logging: error, warn, info, http, verbose, debug, silly.
- Transportes: Console, File, HTTP, Stream y personalizados.
- Formatos: JSON, texto plano, marcas de tiempo, salida con colores.
- Combinación de múltiples transportes: por ejemplo, errores a un archivo e info a la consola.
- Transportes y formatos personalizados: se puede integrar con Logstash, Sentry, Papertrail y otros.
- Rotación de logs: a través del módulo adicional winston-daily-rotate-file.
- Excepciones y rechazos no manejados (unhandled rejection): captura automática de errores no controlados.
Ejemplo de código en JavaScript (Node.js)
const winston = require('winston');
// Creamos el loggerconst logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});
// Usologger.info('Servidor iniciado en el puerto 3000');logger.warn('Memoria insuficiente', { memoryUsage: process.memoryUsage() });try { throw new Error('Algo se rompió');} catch (err) { logger.error('Error al procesar la solicitud', { error: err.message, stack: err.stack });}Cuándo usarlo
Winston es ideal para cualquier proyecto Node.js que requiera logging estructurado: servidores web (Express, Koa), microservicios, utilidades CLI, bots, procesos ETL. Es especialmente útil en entornos de producción donde se necesita recopilar logs de forma centralizada, analizar errores y encontrar problemas rápidamente. Si tu proyecto usa TypeScript, winston tiene soporte completo de tipos.
Alternativas: pino (más rápido, más pequeño), log4js (configuración mediante XML/JSON), bunyan (logs en JSON). Pero winston sigue siendo la solución más flexible y extendida.
También en la biblioteca
HtmlAgilityPack para C# (.NET): guía completa con ejemplos
Procesamiento de imágenes en C++: resize y crop con la biblioteca OpenCV
StackExchange.Redis para C# (.NET): guía completa con ejemplos
Generador de códigos QR en TypeScript: la biblioteca qrcode y su uso