Registro em aplicações Go: melhores práticas para iniciantes

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 em aplicações Go: melhores práticas para iniciantes

\n\n

O registro (logging) é um dos componentes essenciais de qualquer aplicação séria. Ele ajuda a rastrear erros, analisar o comportamento do sistema e entender o que está acontecendo "sob o capô". Neste artigo, vamos abordar as melhores práticas de registro em Go (Golang) para desenvolvedores iniciantes. Você aprenderá quais bibliotecas usar, como organizar os logs e evitar erros comuns.

\n\n

Por que o registro é importante em Go?

\n\n

Go é uma linguagem voltada para a criação de aplicações server-side de alta carga e microsserviços. Em tais sistemas, sem um registro de qualidade é impossível:

\n\n
    \n
  • Encontrar rapidamente a causa de uma falha
  • \n
  • Entender a sequência de eventos
  • \n
  • Coletar métricas para monitoramento
  • \n
  • Depurar código em ambiente de produção
  • \n
\n\n

Um registro mal configurado pode levar à perda de dados críticos ou, ao contrário, ao preenchimento do disco com milhões de mensagens inúteis. Por isso, é importante estabelecer a arquitetura correta desde o início.

\n\n

Biblioteca padrão log

\n\n

Go fornece o pacote embutido log, que é adequado para projetos simples. Ele pode exibir mensagens em stdout/stderr, adicionar carimbos de data/hora e encerrar o programa em erros fatais.

\n\n
package main\n\nimport (\n    "log"\n)\n\nfunc main() {\n    log.Println("Aplicação iniciada")\n    log.Printf("Usuário %s fez login", "admin")\n    // log.Fatal("Erro crítico") // encerra o programa\n}
\n\n

Desvantagens do logger padrão:

\n
    \n
  • Não possui níveis de registro (debug, info, warn, error)
  • \n
  • Não possui saída estruturada (apenas texto)
  • \n
  • Difícil alterar o formato e o destino da saída
  • \n
\n\n

Para projetos de estudo e utilitários simples, isso é suficiente, mas para aplicações de produção é melhor usar bibliotecas mais poderosas.

\n\n

Bibliotecas populares para registro

\n\n

Vamos considerar três opções mais comuns.

\n\n

1. Logrus

\n\n

Logrus é uma das primeiras bibliotecas de terceiros para Go. Ela suporta níveis de registro, campos estruturados e vários formatos de saída (JSON, texto).

\n\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    log := logrus.New()\n    log.SetFormatter(&logrus.JSONFormatter{})\n    log.SetLevel(logrus.InfoLevel)\n\n    log.WithFields(logrus.Fields{\n        "user":   "ivan",\n        "action": "login",\n    }).Info("Usuário fez login")\n}
\n\n

Logrus é fácil de usar, mas tem alto consumo de memória e é um pouco mais lento que alternativas modernas.

\n\n

2. Zerolog

\n\n

Zerolog é uma biblioteca moderna focada em desempenho e alocação mínima de memória. Ela usa uma abordagem de zero-alocação e é ideal para sistemas de alta carga.

\n\n
package main\n\nimport (\n    "github.com/rs/zerolog"\n    "github.com/rs/zerolog/log"\n)\n\nfunc main() {\n    zerolog.TimeFieldFormat = zerolog.TimeFormatUnix\n\n    log.Info().\n        Str("user", "ivan").\n        Str("action", "login").\n        Msg("Usuário fez login")\n\n    log.Error().\n        Err(fmt.Errorf("connection refused")).\n        Msg("Erro de conexão com o BD")\n}
\n\n

Zerolog gera logs no formato JSON por padrão, o que facilita a análise por sistemas de monitoramento (ELK, Grafana Loki).

\n\n

3. Zap

\n\n

Zap da Uber é outro logger de alto desempenho. Ele opera em dois modos: SugaredLogger (conveniente, mas um pouco mais lento) e Logger (velocidade máxima).

\n\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    logger, _ := zap.NewProduction()\n    defer logger.Sync()\n\n    logger.Info("Servidor iniciado",\n        zap.String("port", "8080"),\n        zap.Int("workers", 10),\n    )\n}
\n\n

Para n

Blogs

Book Recommendations