Ú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.warnyconsole.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).
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; enprod, solowarn/errora 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.
![]()

