Manejo de Errores y Logging
En Streamlyra, el manejo de errores está centralizado para garantizar que el servidor nunca se detenga ante fallos inesperados y que el cliente siempre reciba una respuesta coherente.
Manejo de Errores
Clase AppError
Utilizamos una clase personalizada (src/utils/AppError.ts) que extiende de Error. Esta clase nos permite adjuntar metadatos adicionales como:
statusCode: El código HTTP que se debe devolver (ej. 404, 401, 500).isOperational: Indica si es un error controlado (como una validación fallida) o un error de programación inesperado.
Middleware Global de Errores
Ubicado en src/middleware/error.middleware.ts, este middleware intercepta cualquier error lanzado en las rutas o servicios:
- Logging Inteligente: Registra errores
500con prioridadERRORy errores controlados (como400) con prioridadWARN. - Formateo: Devuelve un JSON estandarizado al cliente.
- Seguridad en Producción: Oculta el stack trace en entornos de producción para no exponer detalles internos del código, mostrándolo únicamente en desarrollo.
Sistema de Logging (Pino)
Utilizamos Pino como motor de logging debido a su bajo consumo de recursos y su capacidad para generar registros en formato JSON, ideales para herramientas de análisis de logs.
- Servicio:
src/utils/logger.ts. - Salida: En desarrollo, utilizamos
pino-prettypara que los logs sean legibles por humanos en la terminal. En producción, se emiten en JSON puro para una mayor eficiencia.
Niveles de Log aplicados:
info: Arranque del servidor, conexiones de base de datos exitosas, eventos de sistema.warn: Fallos de autenticación, CSRF inválidos, errores de validación (Zod).error: Fallos en llamadas a APIs externas, errores de conexión a la DB, excepciones no controladas.fatal: Errores críticos que impiden el funcionamiento (ej. configuración corrupta).