winston

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿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 winston

Funciones principales

  1. Niveles de logging: error, warn, info, http, verbose, debug, silly.
  2. Transportes: Console, File, HTTP, Stream y personalizados.
  3. Formatos: JSON, texto plano, marcas de tiempo, salida con colores.
  4. Combinación de múltiples transportes: por ejemplo, errores a un archivo e info a la consola.
  5. Transportes y formatos personalizados: se puede integrar con Logstash, Sentry, Papertrail y otros.
  6. Rotación de logs: a través del módulo adicional winston-daily-rotate-file.
  7. 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.

Recommendations