Volver al blog

Logging estructurado con Pino para Node.js

·2 min de lectura

¿Por qué logging estructurado?

Los logs planos (console.log) son difíciles de analizar en producción. El logging estructurado genera JSON que puede ser parseado, filtrado y analizado por herramientas como Elasticsearch, Datadog o Grafana.

Pino

Pino es el logger más rápido para Node.js. Diseñado para producción, genera JSON directamente y tiene un impacto mínimo en el rendimiento.

import pino from 'pino';

const logger = pino({
  level: process.env.LOG_LEVEL || 'info',
  transport: {
    target: 'pino-pretty',
    options: { colorize: true },
  },
});

logger.info({ userId: 123 }, 'User logged in');
// {"level":30,"time":...,"msg":"User logged in","userId":123}

Niveles de logging

  • fatal: el sistema no puede continuar.
  • error: error que requiere atención inmediata.
  • warn: situación inesperada pero no crítica.
  • info: información general del sistema.
  • debug: información detallada para debugging.
  • trace: trazas muy detalladas.

Contexto y bindings

const childLogger = logger.child({ requestId: 'abc-123' });
childLogger.info('Processing payment');
// Incluye requestId en cada mensaje

Transportes

Pino soporta múltiples transportes: pino/file (archivos), pino-pretty (desarrollo), pino-loki (Grafana Loki), y pino-elasticsearch.

Buenas prácticas

  • Nunca loguees datos sensibles (passwords, tokens).
  • Usa child loggers para contexto de request.
  • Configura el nivel según el entorno.
  • No hagas logging síncrono en producción.

¿Quieres logging estructurado en tu app? En Vynta configuramos Pino para producción.

Artículos relacionados

¿Tienes un proyecto en mente?

Hablemos