Next.js Hacks 2: Usa Discord como Logger

Últimamente vengo renegando con los servicios de logging pagos: caros, overkill para proyectos chicos y encima no siempre los mirás. Entonces pensé: ¿y si mando todo a un canal de Discord y listo? Lo tengo en el celu, puedo mencionar al equipo, buscar, filtrar por hilos… y es gratis. En este episodio te muestro cómo convertí un canal de Discord en mi “Datadog de batalla”.


¿Por qué Discord como logger?

  • Gratis y rápido: un Webhook y a otra cosa.
  • Mobile-first: te llegan los errores al celu como notificaciones.
  • Compartible: etiquetás al equipo, abrís hilos por incidente, pegás capturas, todo en el mismo lugar.
  • Simple: cero SDKs pesados, ni agentes, ni dashboards que no vas a abrir.

Cómo lo resolví en Next.js

1) Crear un Webhook en tu canal de Discord

  • Vas a Configuración del servidor → Integraciones → Webhooks → Nuevo webhook.
  • Elegís el canal (por ejemplo, #logs-app) y copiás la URL.
  • Guardala como variable de entorno: DISCORD_WEBHOOK_URL.

Tip: podés tener uno por ambiente: DISCORD_WEBHOOK_URL_DEV, DISCORD_WEBHOOK_URL_PROD.


2) Un servicio chiquito para enviar logs

Armé un helper que envía mensajes al Webhook y se encarga de formatos, niveles y tamaño de payload.

Código: src/services/discordLogger.ts
Gist: https://gist.github.com/martin2844/9e7ddc28d92481b3e30322af2404cf12

Qué hace:

  • Mapea level → color/emoji (info, warn, error).
  • Corta mensajes largos en chunks para no romper el webhook.
  • Acepta meta (objeto) y lo serializa prolijo en bloques de código.
  • Respeta rate limits básicos.

Ejemplo mínimo de uso:

import { discordLog } from "@/services/discordLogger";

await discordLog("error", "Fallo al crear orden", { orderId, userId, payload });

3) Instrumentation: interceptar console.log/warn/error

Next.js permite un archivo de instrumentation que corre al iniciar el runtime (ideal para parchar cosas globales). Lo aproveché para “duplicar” los logs: siguen yendo a la consola, pero también se mandan a Discord.

Archivo: src/instrumentation.ts
Gist: https://gist.github.com/martin2844/955248e15b796be3c8f6b051030db921

Idea principal:

  • Guardar referencias a console.log, console.warn y console.error.
  • Reemplazarlas por versiones que:
    • Llaman al original (para no perder logs locales).
    • Envían el mensaje serializado a Discord con el nivel correspondiente.
  • Filtrar ruidos comunes (por ejemplo, logs de dev o de librerías muy verbosas).
  • Solo activar si existe DISCORD_WEBHOOK_URL (así en local no molesta).
VER:  Construí una app de IA para arquitectos en 4 horas (¡y funciona!)

4) Habilitar el instrumentation hook en Next

Hay que prender el flag experimental para que Next incluya instrumentation.ts.

Archivo: next.config.mjs
Gist: https://gist.github.com/martin2844/be7fb2557e9449562ec941a9d548b64b

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    instrumentationHook: true,
  },
};

export default nextConfig;

5) Scripts y entorno

Chequeá los scripts del proyecto y las env vars.

Archivo: package.json
Gist: https://gist.github.com/martin2844/d22300eac9891dcaf06e43440f6d51ea

Variables recomendadas:

  • DISCORD_WEBHOOK_URL (o por ambiente)
  • APP_NAME (para saber de qué app viene)
  • APP_ENV (dev/staging/prod) para agrupar por entorno en el canal

Buenas prácticas (para que no sea un spam infernal)

  • Filtrá niveles por entorno: en dev, casi todo a consola; en prod, solo warn/error a Discord.
  • No mandes datos sensibles. Sanitizá tokens y PII.
  • Agrupá por hilos: un hilo por “incidente” o por fecha ayuda un montón.
  • Considerá un “cooldown” para errores repetidos (rate limiting).
  • Separá canales por servicio: #logs-web, #logs-workers, #logs-payments.

Casos de uso que me vienen funcionando

  • Errores 500 y 404 con metadata del request.
  • Eventos de negocio: usuario nuevo, checkout completado, webhooks externos.
  • Alertas “low-cost”: si un cron falla o un job se cae, lo veo al toque en el celu.
  • Deploy hooks: notificación cuando se termina un deploy.

Video


Cierre

Esto no reemplaza a un SIEM ni a un stack de observabilidad posta, pero para proyectos chicos, MVPs o side projects… es magia. Barato, simple y te mantiene cerca de lo que pasa en producción.

Si lo probás, contame cómo te fue y qué eventos terminaste mandando. Y si te sumó, compartilo con ese amigo que sigue pagando de más por logs. Nos vemos en el próximo hack, con otro mate y menos Datadog.

Loading

Esta entrada fue publicada el youtube. Agregá a favoritos el enlace permalink.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *