Sistema de log com módulos
Em aplicações reais, sistemas de log são essenciais para depuração e monitoramento. Bibliotecas como Winston e Pino usam arquitetura modular: você pode trocar o formato das mensagens (JSON, texto) ou o destino (console, arquivo) sem modificar a lógica central. Separar responsabilidades evita que uma mudança no formato quebre o envio dos logs.
O PROBLEMA
Sistema de log modular: core, formatters, transports. Combináveis.
EXEMPLO
import { criarLogger } from "./core.js";
const log = criarLogger({formatter:formatJSON, transport:consoleTransport});
log.info("Servidor iniciado")SOBRE O CONCEITO
O exercício separa o sistema em três módulos: core.js (cria o logger), formatters.js (funções como formatJSON) e transports.js (funções como consoleTransport). O erro comum é o acoplamento — por exemplo, importar o transportador dentro do formatador. Isso cria dependência desnecessária: se você trocar o transportador, precisará alterar o formatador. A solução é que cada módulo cumpra seu papel: o formatador recebe um objeto de log e retorna uma string; o transportador recebe uma string e a envia. O núcleo combina ambos sem saber detalhes internos, usando import e export. Assim, você pode reusar e testar cada parte isoladamente.
RESOLUÇÃO