Registro para TypeScript: mejores soluciones
El registro es un componente crítico de cualquier aplicación en producción. Para el ecosistema TypeScript, existen muchas bibliotecas, cada una ofreciendo un conjunto único de capacidades. En este artículo, revisaremos las cinco mejores soluciones: Winston, Pino, Bunyan, Log4js y TSLog. Conocerás sus puntos fuertes, características de configuración y obtendrás ejemplos de código listos para usar.
1. Winston — el estándar universal
Winston es la biblioteca de registro más popular para Node.js con soporte completo para TypeScript. Proporciona un potente sistema de transportes (a dónde enviar los registros) y formato.
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(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ]});
logger.info('Aplicación iniciada', { service: 'user-service' });logger.error('Error de conexión a la BD', { error: err.message });Ventajas:
- Sistema flexible de transportes (archivos, consola, HTTP, MongoDB, Elasticsearch)
- Soporte integrado para rotación de logs mediante winston-daily-rotate-file
- Excelente integración con TypeScript — tipado completo
- Compatibilidad con perfiladores y sistemas APM
2. Pino — registrador ultrarrápido
Pino está orientado al rendimiento — es de 5 a 10 veces más rápido que Winston. Es la elección ideal para sistemas de alta carga y microservicios.
import pino from 'pino';
const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: true } }});
logger.info({ user: { id: 123 } }, 'Usuario autenticado');Características clave:
- Mínimo consumo de CPU y memoria
- Soporte nativo para streams de Node.js
- Serialización eficiente de objetos
- Soporte para registradores hijo para registro contextual
3. Bunyan — registro estructurado de Joyent
Bunyan fue creado para trabajar con arquitectura de microservicios. Todos los registros se generan en formato JSON, lo que facilita su análisis y procesamiento.
import bunyan from 'bunyan';
const logger = bunyan.createLogger({ name: 'myapp', level: 'info', serializers: { req: bunyan.stdSerializers.req, err: bunyan.stdSerializers.err }});
logger.info({ req: request }, 'Solicitud entrante');Características:
- Serializadores integrados para solicitudes HTTP y errores
- Soporte para ringbuffer para almacenar las últimas N entradas
- Utilidad CLI bunyan para salida formateada en consola
- Integración sencilla con el stack ELK
4. Log4js — enfoque familiar desde Java
Log4js es un puerto del popular framework Java Log4j. Ofrece una configuración familiar mediante niveles y appenders.
import log4js from 'log4js';
log4js.configure({ appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'application.log' } }, categories: { default: { appenders: ['out', 'app'], level: 'debug' } }});
const logger = log4js.getLogger();logger.debug('Depuración de conexión');logger.error('Error crítico');Puntos fuertes:
- Sistema flexible de categorías y filtros
- Soporte para múltiples appenders (archivos, bases de datos, TCP)
- Posibilidad de sobrescribir niveles para diferentes módulos
- Soporte integrado para clustering
5. TSLog — solución ligera para TypeScript
TSLog es una biblioteca minimalista escrita específicamente para TypeScript. Es ideal para proyectos
También en la biblioteca
Rate Limiting en Go (Golang): bibliotecas, patrones y ejemplos de implementación
Timber para Kotlin: guía completa con ejemplos prácticos
Glide/Coil para Kotlin: guía completa con ejemplos
Envío de correo electrónico en JavaScript (Node.js) — bibliotecas y ejemplos de código
Tokens JWT en Go (Golang): biblioteca golang-jwt y ejemplos de uso