Skip to content

Logger

Fang JS incluye una clase Logger integrada para facilitar el rastreo de eventos, errores y advertencias en la terminal. Utiliza códigos de colores ANSI para que la información sea escaneable visualmente de un vistazo.

Puedes instanciar el logger en cualquier parte de tu aplicación, ya sea dentro de un controlador, un servicio o un middleware.

import { Logger } from "@fang-js/fang";
const logger = new Logger();
logger.info("El servidor está listo para recibir peticiones");
logger.warn("La conexión a la base de datos es lenta");
logger.error("No se pudo procesar la transacción");

El Logger viene con métodos preconfigurados para los niveles de log más comunes:

MétodoEtiquetaColorUso sugerido
info(msg)[INFO]CianEventos normales, inicio de procesos o registros.
warn(msg)[WARM]AmarilloAlertas que no detienen el flujo pero requieren atención.
error(msg)[ERROR]RojoExcepciones, fallos críticos o errores de validación.

Fang utiliza un método de la clase Logger para las peticiones http (como lo hace el middleware morgan en express), este método es logHttp(), el cual cuenta con los siguientes parámetros:

ParámetroDescripción
methodRecibe el verbo http usado en la ruta
urlRuta a la que se hizo la petición
msTiempo en milisegundos
statusCodeCódigo de estado de la petición
isErrorCambia el color del statusCode si es true

Si necesitas registrar eventos específicos de un módulo (como base de datos o autenticación), puedes usar el método custom. Este te permite definir tu propia etiqueta y color utilizando el enum de colores de Fang.

import { Logger } from "@fang-js/fang";
import { colors } from "@fang-js/fang/types";
const logger = new Logger();
// Ejemplo: Log personalizado para una base de datos
logger.custom("Nueva conexión establecida", "DATABASE", colors.green);
// Ejemplo: Log para un evento de seguridad
logger.custom("Intento de acceso fallido", "AUTH", colors.magenta);

Por defecto, Fang-js utiliza una instancia interna de la clase Logger para registrar eventos en la consola (como logHttp y warn). Sin embargo, entendemos que en entornos de producción podrías necesitar enviar estos registros a servicios externos (como Datadog, CloudWatch o un archivo local).

Gracias a que el núcleo de Fang es agnóstico a la implementación del logger, puedes sustituirlo fácilmente. Solo necesitas crear una clase que implemente la interfaz ILogger y configurarla mediante el método app.setLogger().

Ejemplo: Implementando un Logger de persistencia

Section titled “Ejemplo: Implementando un Logger de persistencia”

En este ejemplo, crearemos un logger que guarda cada petición HTTP en un archivo llamado access.log.

import { Fang, ILogger } from "@fang-js/fang";
import { colors } from "@fang-js/fang/types";
import { appendFileSync } from "node:fs";
class FileLogger implements ILogger {
// Implementación del registro HTTP para guardar en archivo
logHttp(
method: string,
url: string,
ms: number,
statusCode: number,
isError?: boolean,
) {
const logEntry = `[${new Date().toISOString()}] ${method} ${url}
- ${statusCode} (${ms}ms)\n`;
// Guardamos el log en un archivo físico
appendFileSync("access.log", logEntry);
// También lo mostramos en consola para desarrollo
console.log(`${colors.cyan}${method}${colors.reset} ${url} - ${ms}ms`);
}
// --- Otros métodos de la interfaz ILogger ---
// Deben implementarse según tus necesidades:
/** info(msg: string) { ... } */
/** warn(msg: string) { ... } */
/** error(msg: string) { ... } */
/** custom(msg: string, tag: string, color: colors) { ... } */
// Nota: TS te pedirá definir los métodos aunque estén vacíos
// para cumplir con la interfaz.
info() {}
warn() {}
error() {}
custom() {}
}
const app = new Fang();
// Inyectamos el logger personalizado
app.setLogger(new FileLogger());
app.get("/", (ctx) => {
ctx.json({ message: "Log registrado en archivo" });
});
app.listen();
  • Adaptabilidad: Cambia el destino de tus logs sin tocar la lógica de tus rutas.

  • Limpieza: Mantienes el núcleo de tu aplicación libre de configuraciones pesadas de terceros.

  • Control Total: Tú decides qué información mostrar y qué colores usar según el entorno (desarrollo o producción).

Cero Dependencias

No necesitas instalar librerías pesadas como Winston o Pino para tener logs legibles y profesionales.

Estandarización

Fang utiliza este mismo Logger internamente para mostrar el registro de controladores y el estado del servidor.

DX (Developer Experience)

Los colores ayudan a separar el ruido de la información crítica durante el desarrollo intensivo.