¿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/winstonO mediante yarn:
yarn add winstonyarn add --dev @types/winstonFunciones 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.
También en la biblioteca
Retrofit para Java: guía completa con ejemplos prácticos
gomock para Go: guía completa con ejemplos prácticos
Swashbuckle para C# (.NET): guía completa con ejemplos
Generación de PDF en Java: resumen de las bibliotecas iText, Apache PDFBox, OpenPDF
Machine Learning en TypeScript: revisión de bibliotecas para ML en 2024