Registro en TypeScript: biblioteca 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é se necesita?

Winston es una biblioteca potente y flexible para el registro de logs (logging) en aplicaciones TypeScript y JavaScript. Permite registrar mensajes estructurados de diferentes niveles (info, warn, error, debug) en la consola, archivos, bases de datos o servicios externos. Winston resuelve el problema de la falta de un mecanismo de logging integrado en Node.js, proporcionando una API conveniente para configurar formatos, transportes (dónde escribir los logs) y niveles de importancia. La biblioteca se utiliza ampliamente en proyectos de producción, microservicios y aplicaciones web.

Instalación

Para instalar winston en un proyecto TypeScript, ejecute:

npm install winstonnpm install --save-dev @types/winston

O mediante yarn:

yarn add winstonyarn add --dev @types/winston

Funciones principales

  • Niveles de logging: error, warn, info, http, verbose, debug, silly (se pueden configurar los propios).
  • Transportes: Console, File, HTTP, Stream, así como personalizados (por ejemplo, a Elasticsearch).
  • Formatos: JSON, texto plano, timestamp, etiquetas, colores en consola.
  • Múltiples transportes: escribir simultáneamente en consola y archivo.
  • Logging de excepciones: captura automática de uncaughtException.
  • Wrapper proxy para TypeScript: logger tipado con autocompletado.

Ejemplo de código en TypeScript

import winston from 'winston';

const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), 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('Bajo nivel de memoria');logger.error('Error de conexión a la BD', { error: err });

Cuándo usar winston

Winston es ideal para:

  • Aplicaciones backend en Node.js/TypeScript (Express, NestJS, Fastify).
  • Arquitectura de microservicios: recolección centralizada de logs mediante transporte HTTP.
  • Monitoreo en producción: escritura de logs en archivos con rotación (winston-daily-rotate-file).
  • Depuración y desarrollo: salida coloreada en consola con diferentes niveles.
  • Sistemas con requisitos de auditoría: logs estructurados en JSON para análisis.

No use winston en scripts simples donde sea suficiente console.log — es excesivo para proyectos pequeños. También evite winston en aplicaciones cliente de navegador (allí es mejor usar console o bibliotecas especializadas).

Conclusión

Winston es el estándar de facto para logging en proyectos TypeScript. Ofrece flexibilidad, rendimiento y seguridad de tipos con una configuración adecuada. Comience con un logger simple y amplíelo a medida que la aplicación crezca.

Recommendations