Registro para JavaScript (Node.js): las mejores soluciones

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

Registro para JavaScript (Node.js): las mejores soluciones



El registro es la base del monitoreo y la depuración de cualquier aplicación web. En el mundo de Node.js, existen varias bibliotecas maduras y populares que permiten configurar de manera flexible la recopilación, el formateo y el almacenamiento de registros. En este artículo, analizaremos cuatro de las mejores soluciones: Winston, Pino, Bunyan y Morgan. Conocerás sus características, puntos fuertes y obtendrás ejemplos prácticos de uso.



¿Por qué es necesario el registro en Node.js?

A diferencia del JavaScript del navegador, una aplicación de servidor funciona sin acceso directo a la consola del desarrollador. Los registros permiten:

  • Rastrear errores y excepciones en tiempo real.
  • Analizar el rendimiento (tiempo de respuesta, solicitudes).
  • Registrar eventos de auditoría (inicio de sesión de usuario, modificación de datos).
  • Integrarse con sistemas de monitoreo externos (ELK, Datadog, Splunk).


1. Winston — el estándar universal

Winston es la biblioteca de registro más popular para Node.js. Su principal ventaja son los transportes (dónde escribir los registros) y los formatos (cómo representarlos).

Instalación:

npm install winston


Ejemplo de configuración básica:

const winston = require('winston');

const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'combined.log' }) ]});

logger.info('Servidor iniciado en el puerto 3000');logger.error('Error de conexión a la BD', { db: 'main' });


Características clave:

  • Soporte para múltiples transportes (consola, archivo, HTTP, MongoDB, Elasticsearch).
  • Formatos personalizados (JSON, texto plano, con marcas de tiempo).
  • Filtrado por nivel (error, warn, info, verbose, debug, silly).
  • Creación de registradores hijos para diferentes módulos.

Cuándo elegirlo: para proyectos complejos donde se requiere un enrutamiento flexible de registros e integración con servicios externos.



2. Pino — el registrador ultrarrápido

Pino está diseñado para un rendimiento máximo. Es de 5 a 10 veces más rápido que Winston gracias al uso de JSON estructurado y la minimización de la sobrecarga.

Instalación:

npm install pino


Ejemplo de uso:

const pino = require('pino');

const logger = pino({ level: 'info', transport: { target: 'pino-pretty', // para una salida bonita en consola options: { colorize: true } }});

logger.info({ user: 42 }, 'El usuario inició sesión');logger.error(new Error('No se pudo cargar el archivo'));


Características:

  • Consumo mínimo de CPU y memoria.
  • Soporte integrado para pino-pretty en desarrollo.
  • Trabajo con flujos (streams) para integración con otras herramientas.
  • Serialización automática de objetos sin pérdida de rendimiento.

Cuándo elegirlo: para aplicaciones de alta carga (API, microservicios), donde cada milisegundo cuenta.



3. Bunyan — registros estructurados de los creadores de Joyent

Bunyan de la empresa Joyent (creadores de Node.js) se centra en una estructura de registro estricta. Cada mensaje es un objeto JSON con campos obligatorios (hostname, pid, time).

Instalación:

npm install bunyan


Ejemplo:

const bunyan = require('bunyan');

const logger = bunyan.createLogger({ name: 'myapp', streams: [ { level: 'info', stream: process.stdout }, { level: 'error', path: 'error.

Recommendations