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
Também na biblioteca
Frameworks CLI para Java: Picocli, JCommander e Spring Shell
Rector PHP: guia completo com exemplos práticos
CoreBluetooth para Swift: Guia completo com exemplos práticos
Aprendizado de Máquina em Kotlin: visão geral das bibliotecas para Data Science e ML