/** Níveis de severidade para o sistema de log estruturado. */ export var NivelLog; (function (NivelLog) { /** O mais baixo nível, ideal para rastreamento detalhado de fluxo e execução. */ NivelLog["RASTREAMENTO"] = "RASTREAMENTO"; /** Usado para informações que ajudam a entender o estado do sistema durante a execução. */ NivelLog["DEPURACAO"] = "DEPURACAO"; /** Informações gerais e eventos do sistema. */ NivelLog["INFORMACAO"] = "INFORMACAO"; /** Eventos inesperados, mas que não impedem o funcionamento do sistema. */ NivelLog["AVISO"] = "AVISO"; /** Erros que impactam o funcionamento do sistema, mas que podem ser recuperados. */ NivelLog["ERRO"] = "ERRO"; /** O nível mais alto de severidade, indicando falhas que requerem atenção imediata. */ NivelLog["CRITICO"] = "CRITICO"; })(NivelLog || (NivelLog = {})); /** Detalhes de cada nível de log — peso para filtragem, emoji e método do console. */ export const NivelLogDetalhes = { [NivelLog.RASTREAMENTO]: { peso: 1, rotulo: "Rastreamento", emoji: "🔍", metodo: "debug" }, [NivelLog.DEPURACAO]: { peso: 2, rotulo: "Depuração", emoji: "🐛", metodo: "debug" }, [NivelLog.INFORMACAO]: { peso: 3, rotulo: "Informação", emoji: "ℹ️", metodo: "info" }, [NivelLog.AVISO]: { peso: 4, rotulo: "Aviso", emoji: "⚠️", metodo: "warn" }, [NivelLog.ERRO]: { peso: 5, rotulo: "Erro", emoji: "❌", metodo: "error" }, [NivelLog.CRITICO]: { peso: 6, rotulo: "Crítico", emoji: "🔥", metodo: "error" }, }; /** * Inicializa o sistema de log estruturado. * * @param opcoes.app - Identificador da aplicação/instância (ex: `"front:e-licencie:12345"`) * @param opcoes.nivelMinimo - Nível mínimo para exibição no console (padrão: INFORMACAO) * @param opcoes.arquivamento - Callback opcional para persistir/enviar as entradas de log * * @example * ```ts * const log = iniciarELog({ app: "front:e-licencie:12345" }) * * log.info({ origem: "criarUsuario()", mensagem: "Usuário criado", dados: { id: "abc-123" } }) * // → ℹ️ [Informação] [front:e-licencie:12345] [criarUsuario()] Usuário criado * ``` */ export const iniciarELog = (opcoes) => { const nivel = opcoes.nivelMinimo ?? NivelLog.INFORMACAO; const pesoMinimo = NivelLogDetalhes[nivel].peso; const emitir = (nivelLog, pr) => { const config = NivelLogDetalhes[nivelLog]; if (config.peso < pesoMinimo) return; const entrada = { timestamp: new Date().toISOString(), nivel: nivelLog, app: opcoes.app, origem: pr.origem, mensagem: pr.mensagem, ...(pr.dados !== undefined ? { dados: pr.dados } : {}), }; console[config.metodo](`${config.emoji} [${config.rotulo}] [${opcoes.app}] [${pr.origem}] ${pr.mensagem}`, pr.dados !== undefined ? pr.dados : ""); if (opcoes.arquivamento) { opcoes.arquivamento(entrada, { app: opcoes.app, nivelMinimo: nivel }); } }; return { rastreamento: (pr) => emitir(NivelLog.RASTREAMENTO, pr), depuracao: (pr) => emitir(NivelLog.DEPURACAO, pr), info: (pr) => emitir(NivelLog.INFORMACAO, pr), aviso: (pr) => emitir(NivelLog.AVISO, pr), erro: (pr) => emitir(NivelLog.ERRO, pr), critico: (pr) => emitir(NivelLog.CRITICO, pr), }; }; const _log = iniciarELog({ app: "testando", nivelMinimo: NivelLog.INFORMACAO, arquivamento: () => { // }, }); //log.aviso({ origem: "teste", mensagem: "teste" })