zerolog para Go: guia completo com exemplos práticos

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

zerolog para Go: Guia completo de logging com zero alocação

No mundo das aplicações Go de alta carga, o desempenho é fundamental. Cada alocação extra de memória pode aumentar o tempo de execução do garbage collector (GC) e reduzir a capacidade de processamento do serviço. Bibliotecas tradicionais de logging, como log da biblioteca padrão ou a popular logrus, embora convenientes, criam uma carga significativa no heap, alocando memória para cada chamada do logger. É aqui que entra o zerolog — uma biblioteca de logging para Go projetada com foco em zero alocação de memória (zero allocation).

O zerolog oferece aos desenvolvedores uma API poderosa, flexível e incrivelmente rápida para logging estruturado no formato JSON. Ao contrário de muitas alternativas, o zerolog usa uma cadeia de chamadas de métodos (fluent API) e evita interfaces e reflexão em caminhos críticos, permitindo atingir um desempenho próximo à formatação manual de strings. Isso o torna a escolha ideal para microsserviços, gateways de API, servidores proxy e qualquer outro software onde cada microssegundo e cada byte de memória importam.

A biblioteca não é apenas rápida, mas também extremamente conveniente. Ela suporta níveis de logging (debug, info, warn, error, fatal, panic), logging contextual com Logger.With(), integração com o contexto Go (context.Context), além de configuração flexível de saída (console ou JSON). Neste artigo, vamos detalhar como instalar o zerolog, dominar seus principais métodos com exemplos práticos e explorar as melhores práticas para obter o máximo desempenho.

Instalação

A instalação do zerolog, como a maioria das bibliotecas Go, é feita com o gerenciador de pacotes go get. Execute o seguinte comando na raiz do seu projeto (onde está o arquivo go.mod):

go get -u github.com/rs/zerolog/log

Após executar este comando, a biblioteca será adicionada ao seu arquivo go.mod e você poderá importá-la no seu código.

Início rápido: Exemplo mínimo funcional

Vamos começar com o exemplo mais simples, que demonstra o uso básico do zerolog para exibir uma mensagem no formato JSON.

package main

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

func main() {
    // Define o nível global de logging como Debug.
    // O padrão é o nível Info.
    zerolog.SetGlobalLevel(zerolog.DebugLevel)

    // Logging simples de uma string.
    log.Print("Olá, zerolog!")

    // Logging com nível Info.
    log.Info().Msg("Serviço iniciado com sucesso")

    // Logging com nível Warn.
    log.Warn().Msg("Requisição potencialmente lenta detectada")

    // Logging com nível Error.
    log.Error().Msg("Não foi possível conectar ao banco de dados")
}

Ao executar este código, você verá no console linhas JSON contendo hora, nível, mensagem e outras informações de serviço. Observe a cadeia de chamadas: log.Info().Msg("..."). Esta é a fluent API que torna o código conciso.

Métodos e funções principais

O zerolog oferece um conjunto rico de métodos para logging flexível e eficiente. Vamos explorar 8 deles.

1. log.Info(), log.Debug(), log.Warn(), log.Error(), log.Fatal(), log.Panic()

Assinatura: func Info() *Event (e similar para outros níveis)

O que faz: Esses métodos criam um novo evento de logging com o nível correspondente. Eles retornam um ponteiro para a estrutura Event, que pode ser enriquecida com campos usando outros métodos (como Str(), Int(), etc.).

Recommendations