Registro em Go (Golang): melhores bibliotecas e soluções para produção

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 das tarefas principais no desenvolvimento de qualquer aplicação séria em Go. Um registro configurado corretamente permite encontrar erros rapidamente, analisar desempenho e monitorar o comportamento do sistema em produção. Neste artigo, vamos analisar as bibliotecas de registro mais populares e modernas para Go, seus pontos fortes e fracos, além de fornecer exemplos práticos de código.



Por que o registro é necessário em Go?



Ao contrário da simples saída no console, o registro industrial exige:

  • Estruturação — saída em formato JSON para fácil integração com sistemas de coleta de logs (ELK, Grafana Loki, Datadog);
  • Níveis de registro — debug, info, warn, error, fatal;
  • Desempenho — impacto mínimo na velocidade da aplicação;
  • Contexto — adição de metadados (ID da requisição, nome do usuário, nome da função).


A biblioteca padrão log não suporta saída estruturada e níveis, por isso os desenvolvedores Go utilizam ativamente soluções de terceiros.



1. log/slog — pacote padrão do Go 1.21



A partir da versão Go 1.21, o pacote log/slog foi adicionado à biblioteca padrão. Ele fornece registro estruturado "pronto para uso" e não requer instalação de dependências adicionais.



Vantagens:

  • Suporte oficial dos desenvolvedores do Go;
  • Configuração flexível através de Handler (JSON, texto, personalizado);
  • Níveis integrados (Debug, Info, Warn, Error);
  • Suporte a contexto e grupos de atributos.


Exemplo de uso:

package main

import ( "log/slog" "os")

func main() { // Logger JSON logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) logger.Info("Servidor iniciado", "port", 8080, "env", "production")

// Logger de texto com nível Debug textLogger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ Level: slog.LevelDebug, })) textLogger.Debug("Depuração de conexão", "ip", "192.168.1.1")}


Se você está iniciando um novo projeto em Go 1.21+, slog é a melhor escolha para a maioria das tarefas.



2. zerolog — desempenho máximo



A biblioteca zerolog (github.com/rs/zerolog) é conhecida por sua velocidade excepcional. Ela usa zero-alocações para formatação JSON, tornando-se uma das mais rápidas no ecossistema Go.



Características:

  • Alocação mínima de memória (zero allocation);
  • Níveis de registro: trace, debug, info, warn, error, fatal, panic;
  • Encadeamento de métodos para adicionar campos;
  • Suporte a saída colorida no console.


Exemplo:

package main

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

func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix log.Info().Str("service", "api").Int("status", 200).Msg("Requisição processada")

// Nível Error com stack trace log.Error().Err(err).Str("method", "GET").Msg("Erro na requisição")}


Quando escolher zerolog: quando o desempenho é crítico (microsserviços de alta carga, APIs com milhões de requisições).



3. zap — poderoso e rápido da Uber



A biblioteca zap (go.uber.org/zap) é outra líder em desempenho. Desenvolvida na Uber para necessidades internas, tornou-se um padrão de facto para muitos projetos Go.



Principais recursos:

  • Dois modos: Logger (mais lento, mais conveniente

Recommendations