Cero Dependencias
No necesitas instalar librerías pesadas como Winston o Pino para tener logs legibles y profesionales.
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étodo | Etiqueta | Color | Uso sugerido |
|---|---|---|---|
info(msg) | [INFO] | Cian | Eventos normales, inicio de procesos o registros. |
warn(msg) | [WARM] | Amarillo | Alertas que no detienen el flujo pero requieren atención. |
error(msg) | [ERROR] | Rojo | Excepciones, 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ámetro | Descripción |
|---|---|
method | Recibe el verbo http usado en la ruta |
url | Ruta a la que se hizo la petición |
ms | Tiempo en milisegundos |
statusCode | Código de estado de la petición |
isError | Cambia 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 datoslogger.custom("Nueva conexión establecida", "DATABASE", colors.green);
// Ejemplo: Log para un evento de seguridadlogger.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().
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 personalizadoapp.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.