O que é logging em Go?
Logging é o processo de registrar eventos que ocorrem em um programa durante sua execução. Em Go, o suporte integrado para logging é implementado através do pacote log da biblioteca padrão. Este pacote fornece uma maneira simples e eficiente de enviar mensagens para stdout/stderr, gravá-las em arquivos e gerenciar o formato de saída. Logs são necessários para depuração, monitoramento de operações de aplicações, auditoria de segurança e análise de erros em ambiente de produção.
Por que o logging é necessário?
- Depuração: detecção e correção rápidas de erros durante o desenvolvimento.
- Monitoramento: acompanhamento do estado da aplicação em tempo real.
- Auditoria: registro de ações de usuários e eventos do sistema.
- Análise de desempenho: identificação de gargalos e problemas de performance.
Instalação
O pacote log faz parte da biblioteca padrão do Go, portanto, nenhuma instalação adicional é necessária. Basta importá-lo no seu projeto:
import "log"Para logging avançado, existem bibliotecas de terceiros populares que são instaladas via go get:
go get github.com/sirupsen/logrus# ougo get go.uber.org/zapFunções principais da biblioteca padrão log
log.Print(),log.Printf(),log.Println()— saída de mensagens.log.Fatal(),log.Fatalf(),log.Fatalln()— saída de mensagem e encerramento do programa com código 1.log.Panic(),log.Panicf(),log.Panicln()— saída de mensagem e chamada de pânico.
Exemplo de código em Go
package main
import (\t"log"\t"os")
func main() {\t// Configuração de saída para arquivo\tfile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)\tif err != nil {\t\tlog.Fatal(err)\t}\tdefer file.Close()
\t// Criação de logger com prefixo e flags\tlogger := log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
\t// Exemplos de logging\tlogger.Println("Aplicação iniciada")\tlogger.Printf("Usuário %s fez login", "admin")
\t// Uso do logger padrão\tlog.Println("Esta é uma mensagem no stdout")}Quando usar
- log padrão: para projetos simples, scripts, utilitários de linha de comando.
- Logrus: para aplicações em produção, onde são necessários níveis de logging (Info, Warn, Error, Debug), logs estruturados em formato JSON.
- Zap: para sistemas de alta carga, onde o desempenho é crítico (alocação mínima de memória).
- Zerolog: outro logger rápido com suporte a zero allocation.
A escolha da biblioteca depende dos requisitos de desempenho, complexidade do projeto e necessidade de logs estruturados.
Também na biblioteca
Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask
Event Bus e padrão Observer em TypeScript: implementação e exemplos
Planejador de Tarefas em C++: criando um Task Scheduler do zero
Bibliotecas WebSocket Rust: Tokio-tungstenite e async-tungstenite para tempo real