Registro para 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é sirve?

Winston es una biblioteca potente y flexible para el registro de logs (logging) en aplicaciones TypeScript y JavaScript. Permite escribir logs en diferentes destinos (consola, archivos, bases de datos) con distintos niveles de importancia. A diferencia del simple console.log, Winston ofrece control total sobre el formato de los logs, su rotación y filtrado.

¿Para qué usar Winston? En proyectos grandes, la salida estándar de la consola se vuelve inútil: los logs se mezclan, se pierden y no se pueden analizar. Winston resuelve estos problemas: puedes configurar el registro de errores en un archivo separado, los mensajes informativos en la consola y los datos de depuración en una base de datos. Esto es fundamental para la depuración, el monitoreo y la auditoría.

Instalación

Para instalar Winston en un proyecto TypeScript, ejecuta el comando:

npm install winston

También se recomienda instalar los tipos:

npm install --save-dev @types/winston

Si usas yarn:

yarn add winston

Funciones principales

  • Niveles de logging: error, warn, info, http, verbose, debug, silly. Cada nivel tiene una prioridad, y puedes configurar qué niveles se muestran en diferentes transportes.
  • Transportes: formas de salida de los logs. Integrados: Console, File, Http, Stream. Puedes crear los tuyos propios.
  • Formatos: personalización de la apariencia de los logs (JSON, timestamp, salida con colores).
  • Rotación de archivos: a través del módulo adicional winston-daily-rotate-file puedes crear automáticamente nuevos archivos de logs por día o tamaño.
  • Metadatos: transmisión de contexto adicional (por ejemplo, ID de solicitud, nombre de usuario).

Ejemplo de código en TypeScript

Creemos un logger simple con salida a consola y archivo:

import winston from 'winston';

const 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.error('Error de conexión a la base de datos', { database: 'main' });

En este ejemplo: los mensajes informativos se muestran en la consola (con colores) y en el archivo combined.log, mientras que los errores se guardan adicionalmente en error.log. El formato de los logs es JSON con marca de tiempo.

¿Cuándo usar Winston?

  • En entornos de producción para el monitoreo de errores.
  • En arquitecturas de microservicios para recopilar logs en un almacenamiento centralizado.
  • Cuando se requiere auditoría de las acciones de los usuarios.
  • En proyectos donde se necesita analizar logs con ELK (Elasticsearch, Logstash, Kibana) u otros sistemas.

Winston es el estándar de la industria para el logging en TypeScript. Es fácil de configurar, pero se escala para cumplir con requisitos complejos.

Recommendations