Registro en aplicaciones JavaScript: mejores prácticas — parte 3
En esta parte final de la serie de artículos sobre registro en JavaScript, veremos técnicas y herramientas avanzadas que le ayudarán a construir un sistema de monitoreo confiable en aplicaciones Node.js. El material será útil tanto para el aprendizaje como para la aplicación práctica, desde JavaScript para principiantes hasta desarrolladores experimentados. Discutiremos el registro estructurado, la rotación de registros, la integración con servicios externos y la seguridad.
1. Registro estructurado en Node.js
El console.log() común no es adecuado para un entorno de producción. En su lugar, use bibliotecas que generen registros JSON. Esto simplifica su análisis y procesamiento.
Ejemplo con la biblioteca Winston
const winston = require('winston');
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});
// Usologger.info('Usuario registrado', { userId: 123, email: 'user@example.com' });logger.error('Error de base de datos', { error: err.message, stack: err.stack });Este enfoque permite filtrar fácilmente los registros por nivel, tiempo y contexto. Esto es especialmente importante en la programación de microservicios.
2. Rotación de registros y gestión del tamaño
Los registros pueden llenar rápidamente el disco. Use la rotación: archivado automático de archivos antiguos. En Node.js, esto se implementa fácilmente con el módulo winston-daily-rotate-file.
Ejemplo de configuración de rotación
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({ filename: 'logs/application-%DATE%.log', datePattern: 'YYYY-MM-DD', maxSize: '20m', maxFiles: '14d'});
const logger = winston.createLogger({ transports: [transport]});Esto garantiza que los registros no ocupen más de 20 MB por día y se almacenen durante 14 días.
3. Integración con servicios de monitoreo externos
Para la recolección centralizada de registros, use servicios como Logstash, Datadog o Sentry. En JavaScript, esto se hace a través de los transports de Winston.
Ejemplo de envío de registros a Logstash
const { LogstashTransport } = require('winston-logstash-transport');
const logger = winston.createLogger({ transports: [ new LogstashTransport({ host: 'logstash.example.com', port: 5000 }) ]});De esta manera, podrá analizar los registros en tiempo real, crear paneles y alertas.
4. Seguridad en el registro
Nunca registre datos sensibles: contraseñas, tokens, números de tarjetas de crédito. Use filtros o funciones de enmascaramiento.
Ejemplo de enmascaramiento de datos
function maskSensitive(obj) { const masked = { ...obj }; if (masked.password) masked.password = '***'; if (masked.token) masked.token = '***'; return masked;}
logger.info('Solicitud de usuario', maskSensitive(req.body));Esto lo protegerá contra filtraciones y ayudará a cumplir con el GDPR.
Conclusión
En esta parte, hemos cubierto las prácticas clave de registro en aplicaciones JavaScript en Node.js: registros estructurados, rotación, integración con sistemas externos y seguridad. Estas técnicas le ayudarán a crear sistemas confiables y fáciles de mantener. Para el aprendizaje, recomendamos comenzar con Winston e implementar gradualmente herramientas más complejas. JavaScript para principiantes puede parecer difícil, pero la práctica lo hará un profesional. ¡Buena suerte en la programación!