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:  5 cosas útiles que podés hacer con tu servidor casero (y una que no recomiendo)

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 *