77 lines
3.5 KiB
JavaScript
77 lines
3.5 KiB
JavaScript
/** 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" })
|