Zap / Logrus para Go: guia completo com exemplos

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

Introdução ao logging em Go: Zap e Logrus

\n\n

Logging é um componente criticamente importante de qualquer aplicação séria. Ele permite monitorar o estado do programa, registrar erros, analisar desempenho e depurar código em ambiente de produção. Na biblioteca padrão do Go existe o pacote log, mas ele possui capacidades limitadas: não há níveis de logging (exceto os primitivos), não há saída estruturada, não há formatos flexíveis. Para resolver esses problemas, foram criadas duas bibliotecas poderosas: Zap (da Uber) e Logrus (um dos primeiros loggers populares).

\n\n

Neste artigo, vamos detalhar ambas as bibliotecas, seus métodos, exemplos de uso e melhores práticas. Você aprenderá como configurar logging estruturado, como trabalhar com níveis, como adicionar campos contextuais e como evitar erros típicos.

\n\n

O que é Zap?

\n

Zap é uma biblioteca de alto desempenho para logging estruturado da empresa Uber. Ela é focada em velocidade e alocação mínima de memória. O Zap suporta dois modos de operação: SugaredLogger (conveniente, mas um pouco mais lento) e Logger (máximo desempenho).

\n\n

O que é Logrus?

\n

Logrus é uma das primeiras e mais populares bibliotecas de logging em Go. Ela fornece uma API simples, suporte a níveis, formatadores (JSON, Text) e hooks para integração com sistemas externos (por exemplo, Sentry, Slack). Logrus é mais fácil de aprender, mas perde para Zap em desempenho.

\n\n

Instalação

\n

A instalação de ambas as bibliotecas é feita da forma padrão através do go get:

\n\n
// Instalação do Zap\ngo get -u go.uber.org/zap\n\n// Instalação do Logrus\ngo get -u github.com/sirupsen/logrus\n
\n\n

Após a instalação, você pode importá-las no seu projeto:

\n\n
import (\n    "go.uber.org/zap"\n    "github.com/sirupsen/logrus"\n)\n
\n\n

Início rápido com exemplo de código

\n\n

Exemplo com Zap

\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    // Criando um logger de produção (alto desempenho)\n    logger, _ := zap.NewProduction()\n    defer logger.Sync() // libera o buffer antes de sair\n\n    // Registrando uma mensagem com campos\n    logger.Info("Aplicação iniciada",\n        zap.String("version", "1.0.0"),\n        zap.Int("port", 8080),\n    )\n\n    // Usando SugaredLogger para conveniência\n    sugar := logger.Sugar()\n    sugar.Infow("Usuário fez login",\n        "user", "john_doe",\n        "ip", "192.168.1.1",\n    )\n}\n
\n\n

Exemplo com Logrus

\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    // Configurando o formato de saída (JSON)\n    logrus.SetFormatter(&logrus.JSONFormatter{})\n\n    // Definindo o nível de logging\n    logrus.SetLevel(logrus.InfoLevel)\n\n    // Registrando uma mensagem com campos\n    logrus.WithFields(logrus.Fields{\n        "version": "1.0.0",\n        "port":    8080,\n    }).Info("Aplicação iniciada")\n\n    // Registrando um erro\n    logrus.WithFields(logrus.Fields{\n        "user": "john_doe",\n        "ip":   "192.168.1.1",\n    }).Warn("Tentativa de login com senha incorreta")\n}\n
\n\n

Métodos e funções principais

\n\n

1. Zap: NewProduction() / NewDevelopment()

\n

O que faz: Cria um logger pré-configurado para ambiente de produção ou desenvolvimento. O logger de produção usa formato JSON e é otimizado para velocidade. O logger de desenvolvimento usa saída de texto colorida e inclui stack traces.

\n

Parâmetros: Nenhum (retorna *zap.Logger e um erro).

\n

Exemplo:

\n
prodLogger, _ := zap.NewProduction()\ndevLogger, _ := zap.NewDevelopment()\n
\n\n

2. Zap: Logger.Info(),

Recommendations