Logging & Monitoramento
Regras
- Logging estruturado: formato JSON com campos
timestamp, level, message, requestId, userId
- Níveis de log:
error (quebrado), warn (degradado), info (eventos de negócio), debug (apenas desenvolvimento)
- Use Pino para logging em Node.js — rápido, estruturado, JSON por padrão
- Sentry para rastreamento de erros: inicialize cedo, capture exceções não tratadas, adicione contexto de usuário e breadcrumbs
- Correlacione logs com IDs de requisição — gere um UUID por requisição, passe por todas as chamadas de serviço
- Nunca registre segredos, senhas, tokens ou números de cartão de crédito completos — remova campos sensíveis
- Alerte sobre picos na taxa de erro, não erros individuais — use thresholds (ex.: >5% de taxa de erro em 5 min)
- Axiom/Datadog: envie logs via OTLP ou SDK nativo, adicione métricas personalizadas para KPIs de negócio
- Endpoint de health check:
GET /health retornando { status: "ok" } com verificação de conectividade do banco de dados
- Monitore tempos de resposta nos percentis p50, p95, p99 — alerte sobre degradação no p95
Padrões
import pino from "pino";
const logger = pino({ level: process.env.LOG_LEVEL || "info" });
logger.info({ userId, action: "checkout", orderId }, "Pedido realizado");
logger.error({ err, requestId }, "Falha no processamento do pagamento");
import * as Sentry from "@sentry/nextjs";
Sentry.init({ dsn: process.env.SENTRY_DSN, tracesSampleRate: 0.1 });
Evitar
console.log em produção — use um logger estruturado
- Logging de todo corpo de requisição — registre resumos, não payloads
- Ignorar rejeições de promise não tratadas — sempre capture-as
- Fadiga de alertas com alertas ruidosos — ajuste thresholds, agrupe erros semelhantes