Skip to content

gaudiumsoftware/MchLogToolkitGo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MchLogToolkitGo

Ferramenta de log para Go do sistema Machine.

Recursos disponíveis na ferramenta

  • Níveis de log: INFO, TEST, DEBUG, WARN, ERROR e FATAL.
  • Criação de arquivos de log: cria arquivos de log no formato JSON.
  • Criação de arquivos de log por nível: cria arquivos de log separados por nível.
  • Criação de arquivos de log separados por hora: cria arquivos de log separados por hora.
  • Criação de diretório padrão para arquivos de log: os logs são sempre salvos em /applog/<nome-do-serviço>.

Utilização nos serviços da Machine

Por ser um pacote privado no github, é necessário informar ao Go que está sendo utilizado um repositório privado.

export GOPRIVATE=github.com/gaudiumsoftware/mchlogtoolkitgo

Adiciona o módulo no projeto go com o comando:

go get github.com/gaudiumsoftware/mchlogtoolkitgo

Importa o módulo no código go:

import "github.com/gaudiumsoftware/mchlogtoolkitgo"

Adiciona o nível de log no arquivo de configuração do serviço:

[log]
level = "debug"

Pega o nível de log do arquivo de configuração do serviço:

level := config.GetString("log.level").(string)

Inicializa o logger no código para utilização:

const serviceName = "service-name"
logger := mchlogtoolkitgo.NewLogger(serviceName, level)
logger.Initialize()

Dessa forma, os logs serão gravados por padrão no diretório /applog/service-name/*

Para alterar o diretório de logs, utilize o método SetPath:

const serviceName = "service-name"
logger := mchlogtoolkitgo.NewLogger(serviceName, level)
logger.SetPath("/path/to/logs")
logger.Initialize()

O nível pode ser setado também posteriormente coma função SetLevel:

logger.SetLevel(mchlogtoolkitgo.DebugLevel)

Utiliza o logger para logar mensagens:

logger.Info("mensagem de informação")
logger.Test("mensagem de teste")
logger.Debug("mensagem de debug")
logger.Warn("mensagem de aviso")
logger.Error("mensagem de erro")
logger.Fatal("mensagem de erro fatal")

Estas chamadas criarão arquivos de logs no diretório /applog/service-name/INFO no formato:

{
  "service": "service-name",
  "timestamp": "2024-08-07 15:39:23",
  "level": "INFO",
  "line": "10",
  "source": "path/service.go",
  "message": "mensagem de informação",
  "trace": ""
}

Boas práticas de logs

Nesta seção são apresentados exemplos de bons e maus usos de logs.

Bons usos

  • Logs de informações: são úteis para informar o que está acontecendo no sistema.

Exemplo: na função main, ao realizar a configurar e iniciar a aplicação:

logger.Info("Aplicação iniciada e ouvindo na porta 80")
  • Logs de debug: são úteis para informar detalhes do sistema que podem ser úteis para depurar problemas.

Exemplo: numa função de busca no redis, ao realizar a busca printa o valor para verificar se está correto:

value, err := redisClient.Get("key").Result()
logger.Debug("Valor encontrado no redis: ", value)
  • Logs de teste: são úteis para informar a respeito da execução de testes.

Exemplo: numa função de teste, ao realizar uma requisição de teste, informa o valor do parâmetro recebido:

if val, ok := params["test"]; ok {
  logger.Test("Teste de requisição: ", val)
}
  • Logs de warning: são aqueles utilizados para informar mensagens de aviso, ou seja, situações que não comprometem o funcionamento do sistema mas que devem ser tratadas com atenção.

Exemplo: numa função que faz uma busca no redis e não consegue encontrar o dado, é importante informar que o dado não foi encontrado e continuar fazendo uma busca no mysql:

value, err := redisClient.Get("key").Result()
if err != nil {
  logger.Warn("Valor não encontrado no redis, buscando no mysql")
  value, err = mysqlClient.Query("SELECT key FROM table ...")
  ...
}
...
  • Logs de erro: são utilizados para informar erros que podem comprometer o funcionamento do sistema.

Exemplo: numa função que faz uma busca no mysql porém não consegue se conectar ao banco:

value, err := mysqlClient.Query("SELECT * FROM table ...")
if err != nil {
  logger.Error("Erro ao buscar dados no mysql: ", err)
  return err
}
  • Logs de erro fatal: são utilizados para informar erros que definitivamente comprometem o funcionamento do sistema.

Exemplo: numa função que faz a conexão com o mysql e falha, é importante informar o erro e encerrar a aplicação:

db, err := sql.Open("mysql", MySQLDNS)
if err != nil {
    logger.Fatal("Error connecting to mysql: " + err.Error())
    os.Exit(1)
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages