1.0.9 • Published 3 years ago

oi-log-message v1.0.9

Weekly downloads
56
License
ISC
Repository
-
Last release
3 years ago

Visão Geral

Funcionalidade que padroniza os códigos que são enviados para o Kibana e Auditoria.

Responsáveis

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 javascript
  • this contém o escopo do objeto corrente
  • this.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ção
  • setRequest(req) Adiciona o escopo do request da API para dentro do LogMessage
  • service.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 service
  • req 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 service
  • req 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 no try{...}catch(errorObject){...} do bloco try/catch.
  • description Mensagem descritiva a ser logada
  • object 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 corrente
  • useLastCaller - 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
    }
}

print - Quando não queremos imprimir a mensagem imediatamente. Ela é utilizada em conjunto com o setError e setMessage

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() e catch()

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: { ... }
        }
        */
    }
}
1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago