Ferramenta de log para Go do sistema Machine.
- 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>.
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/mchlogtoolkitgoAdiciona o módulo no projeto go com o comando:
go get github.com/gaudiumsoftware/mchlogtoolkitgoImporta 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": ""
}
Nesta seção são apresentados exemplos de bons e maus usos de logs.
- 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)
}