npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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

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