Registro em Go (Golang): melhores bibliotecas e soluções 2024

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Registro para Go (Golang): melhores soluções



Registro é uma parte fundamental de qualquer aplicação séria. No ecossistema Go (Golang), existem muitas bibliotecas, cada uma oferecendo seu próprio equilíbrio entre desempenho, flexibilidade e usabilidade. Neste artigo, veremos as melhores soluções para registro em Go, desde a biblioteca padrão até ferramentas de alto desempenho, como zerolog e zap.



Biblioteca padrão: log



Go vem com o pacote embutido log. Ele é simples, mas tem limitações: ausência de níveis de registro (Debug, Info, Warn, Error), sem suporte para saída estruturada (JSON) e capacidades mínimas de formatação. No entanto, para projetos pequenos ou depuração rápida, é perfeitamente adequado.



package main

import ( "log")

func main() { log.Println("Esta é uma mensagem informativa") log.Fatalln("Erro fatal, a aplicação será encerrada")}


Prós: não requer instalação, dependência zero.
Contras: baixa flexibilidade, ausência de níveis de registro, sem logs estruturados.



Logrus — clássico com amplas capacidades



Logrus foi por muito tempo o padrão de facto para registro em Go. Ele fornece níveis de registro, suporte para formato JSON e vários hooks para integração com sistemas externos (Logstash, Sentry, etc.).



package main

import ( "github.com/sirupsen/logrus")

func main() { log := logrus.New() log.SetFormatter(&logrus.JSONFormatter{})

log.WithFields(logrus.Fields{ "user_id": 123, "action": "login", }).Info("Usuário entrou no sistema")}


Prós: API rica, muitos hooks, suporte para logs estruturados.
Contras: desempenho relativamente baixo, tamanho grande do arquivo binário.



Zerolog — alto desempenho e zero alocações



Zerolog (dos criadores do RSocket) é uma biblioteca que coloca o desempenho em primeiro lugar. Ela usa o princípio de "zero allocation" (nenhuma alocação de memória) para caminhos críticos, o que a torna uma das mais rápidas em Go. Zerolog é ideal para microsserviços e sistemas de alta carga.



package main

import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log")

func main() { // Configuração do logger global zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

log.Info(). Str("service", "auth"). Int("user_id", 456). Msg("Requisição autorizada")

// Registro de erros err := someFunction() if err != nil { log.Error().Err(err).Msg("Não foi possível executar a operação") }}

func someFunction() error { return nil}


Prós: desempenho recorde, baixo consumo de memória, API simples.
Contras: menos flexível que Logrus, requer adaptação à sintaxe encadeada.



Zap — padrão industrial da Uber



Zap (Zap Awesome Performance) foi desenvolvido por engenheiros da Uber. Ele oferece dois modos: SugaredLogger (conveniente, mas com pequena sobrecarga) e Logger (o mais rápido possível). Zap suporta logs estruturados, níveis e codificadores personalizados.



package main

import ( "go.uber.org/zap")

func main() { // Criando o logger (modo Production) logger, _ := zap.NewProduction() defer logger.Sync() // libera o buffer, se houver

// SugaredLogger — sintaxe conveniente sugar := logger.Sugar() sugar.Infow("Servidor iniciado", "port", 8080, "env", "production", )

// Logger — desempenho máximo logger.Info("Evento chave", "status", "ok", "latency_ms", 42, )}


Prós: alto desempenho, dois modos de uso, ampla adoção na indústria.
Contras: API mais complexa que zerolog, necessidade de escolher entre modos.

Recommendations