oi-log-message
v1.0.9
Published
Funcionalidade que padroniza os códigos que são enviados para o Kibana e Auditoria
Downloads
15
Readme
Visão Geral
Funcionalidade que padroniza os códigos que são enviados para o Kibana e Auditoria.
Responsáveis
- Esdras Castro [email protected]
Instalando o projeto
npm i oi-log-message
Funcionalidades
LogMessage
Cria um log padronizado para ser utilizado no Debug, Kibana e Auditoria. Para utilizá-lo basta importar a classe LogMessage da biblioteca oi-log-message
const { LogMessage } = require('oi-log-message');
Instanciá-la no construtor da classe que irá utilizar passando o escopo this e o nome do arquivo __filename, conforme exemplo abaixo:
class Exemplo {
contructor() {
super({
module: 'Nome da Funcionalidade - Outras informações',
});
this.log = new LogMessage(this, __filename);
}
}
__filname
é uma variável nativa do javascriptthis
contém o escopo do objeto correntethis.log
será o atributo da classe que vai conter a instância de LogMessage
Modo de Uso
Inclusão do request no escopo da mensagem no Controller
const service = require('../service/minha-service.js');
class Exemplo extends BaseController {
contructor() {
super({
module: 'Nome da Funcionalidade - Outras informações',
});
this.log = new LogMessage(this, __filename);
}
teste(req, res, next) {
this.log.setRequest(req);
service.testaService(dados, req);
}
}
teste(req, res, next)
Método executado pelo route da aplicaçãosetRequest(req)
Adiciona o escopo do request da API para dentro do LogMessageservice.testaService(dados, ..., req)
Exemplo de chamada a método de uma service passando os dados necessários na service, e o request da API.
Inclusão do request no escopo da mensagem na Service ou Integration
Quando uma classe não possui o request da API, este deve recebê-lo como parâmetro no método chamado.
// class Exemplo extends BaseRest {
class Exemplo extends BaseService {
contructor() { ... }
testaService(dados, req) {
// req recebido via parâmetro e adicionado ao escopo do LogMessage (this.log.setRequest(req))
this.log.setRequest(req);
}
}
dados
exemplo de parâmetros recebidos por um o método de uma servicereq
Requisição da API, ela vem como parâmetro no metodo do controller executado em Route
Quando não é necessário a inclusão do request no escopo da mensagem (Controller, Service ou Integration)
Quando o método que já adicionou o request, no escopo da mensagem, e depois chama outro método dentro da mesma classe, não é necessário adicionar novamente o escopo do request na mensagem. Porém, caso seja necessário trocar as informações do request, pode-se adicionar um novo escopo de request da API.
class Exemplo extends BaseService {
contructor() { ... }
// Método para uso apenas nesta classe, não é utilizado externamente ou por outra aplicação/funcionalidade
naoPrecisaDeRequest() {
// Exemplo de uso sem a adição do espoco do request.
// Neste caso, só utilizamos o LogMessage normalmente.
this.log.success('Mensagem do sucesso', objetoParaLog);
}
// Método executado pelo route.js
teste(dados, req) {
this.log.setRequest(req);
// Exemplo de chamada ao método local sem a passagem do parâmetro req
this.naoPrecisaDeRequest();
}
}
dados
exemplo de parâmetros recebidos por um método de uma servicereq
Requisição da API, ela vem como parâmetro no metodo do controller executado em Route
Métodos de impressão de mensagens do LogMessage
Todos os métodos abaixo serão exemplificados e mostrados suas saídas e ações requeridas antes de executá-los.
success(description, object) => void
- Imprime uma mensagem de sucesso
error(description, object) => void
- Imprime uma mensagem de erro
debug(description, object) => void
- Imprime uma mensagem de debug.
~ Devesse executar o setStatus(erro = false)
antes de rodar o debug()
. Caso contrário, irá imprimir o status da última mensagem executada.
catch(errorObject, description, object) => void
- Imprime uma mensagem de erro. Ele verifica se o erro captura está no escopo do método corrente, e se já foi tratado. Caso já tenha sido tratado, não imprime a mensagem, do contrário, imprime a mensagem description
definida e o objeto object
passado.
errorObject
Objeto de erro gerado por uma exceção na aplicação. Vêm notry{...}catch(
errorObject
){...}
do bloco try/catch.description
Mensagem descritiva a ser logadaobject
Objeto a ser apresentada no log do Kibana (pretty)
toString() => string
- Retorna a mensagem formatada da última mensagem e status definidos.
print(object) => void
- Retorna a mensagem formatada da última mensagem e status definidos. A diferênça dela para o toString()
é que, este possui métodos a serem executados antes de efetuar o print.
Métodos úteis
getCaller
- Utilizado para atribuir o nome da thread do método correnteuseLastCaller
- Utilizando em conjunto com o getCaller quando se quer substituir o caller de um método pelo último método chamado.
Exemplo 1:
this.log.getCaller().useLastCaller();
Exemplo 2:this.log.useLastCaller(false);
Executando os métodos de Mensagem e suas saídas
sucesso
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
this.log.success('Teste Sucesso', {
Request: { produto },
Response: response
});
/*
Exemplo de saída no Kibana:
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [sucesso] [00000000001] - Teste Sucesso
pretty: {
Request: {
produto: { ... }
},
Response: { ... },
APIRequest: { ... }
}
*/
}
}
erro
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
this.log.error('Teste Erro', {
Request: { produto }
});
/*
Exemplo de saída no Kibana:
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [Erro] [00000000001] - Teste Erro
pretty: {
Request: {
produto: { ... }
},
APIRequest: { ... }
}
*/
}
}
catch
quando a mensagem do erro não foi formatada ou não pertence ao método corrente
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
try {
// P1
this.log.error('Teste Erro no try/catch');
throw new Error('Exceção executada');
} catch (error) {
//P2
this.log.catch(error, 'Teste Catch', {
Request: { produto }
});
}
/*
Exemplo de saída no Kibana:
[P1]
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [erro] [00000000001] - Teste Erro no try/catch
pretty: null
[P2]
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [erro] [00000000001] - Teste Catch
pretty: {
Request: { produto: { ... } },
APIRequest: { ... },
StackTrace: { ... }
}
*/
}
}
catch
quando a mensagem do erro já foi formatada e pertence ao método corrente
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
try {
// P1
this.log.error('Teste Erro no try/catch');
throw new Error(this.log.toString());
} catch (error) {
//P2
this.log.catch(error, 'Teste Catch', {
Request: { produto }
});
}
/*
Exemplo de saída no Kibana:
[P1]
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [erro] [00000000001] - Teste Erro no try/catch
pretty: null
[P2]
Não tem impressão
*/
}
}
toString
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
this.log.error('Teste Erro', {
Request: { produto }
});
const errorMessage = this.log.toString();
// errorMessage: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [Erro] [00000000001] - Teste Erro
}
}
setError
esetMessage
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
const rand = Math.random() * 10;
this.log
.setError(false)
.setMessage('Número gerado é maior ou igual que 5');
if(rand < 5) {
this.log
.setError(true)
.setMessage('Número gerado é inferior a 5');
}
this.log.print({ random: rand });
/*
Exemplo de saída no Kibana:
[Caso 1] rand = 2
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [Erro] [00000000001] - Número gerado é inferior a 5
pretty: {
random: 2,
APIRequest: { ... }
}
[Caso 2] rand = 9
msg: [minhaoi] [Minha Funcionalidade] [nome-arquivo] [teste] [Sucesso] [00000000001] - Número gerado é maior ou igual que 5
pretty: {
random: 9,
APIRequest: { ... }
}
*/
}
}
Executando os métodos quando está dentro de um callback
then()
ecatch()
const service = require('./service');
class Exemplo {
constructor() {...}
teste(req, res, next) {
...
service.executaTeste(dados, req)
.then(response => {
this.log.addScope(this).setRequest(req);
this.log.success('Teste callback', {
Request: { dados },
Response: response
});
})
.catch(error => {
this.log.addScope(this).setRequest(req);
this.log.error('Teste callback 2', {
Request: { dados },
Response: response
});
});
/*
Exemplo de saída no Kibana:
msg: [minhaoi] [Minha Funcionalidade] [exemplo] [executaTeste.then] [Sucesso] [00000000001] - Teste callback
msg2: [minhaoi] [Minha Funcionalidade] [exemplo] [executaTeste.catch] [Erro] [00000000001] - Teste callback 2
pretty: {
Request: {
produto: { ... }
},
Response: { ... },
APIRequest: { ... }
}
*/
}
}