Go:
Registro de Logs
Como Fazer:
Em Go, o logging pode ser implementado usando o pacote da biblioteca padrão log
. Este pacote fornece capacidades simples de logging, como escrever na saída padrão ou em arquivos. Vamos começar com um exemplo básico de logging para a saída padrão:
package main
import (
"log"
)
func main() {
log.Println("Esta é uma entrada de log básica.")
}
Saída:
2009/11/10 23:00:00 Esta é uma entrada de log básica.
O carimbo de data/hora no início da entrada de log é adicionado automaticamente pelo pacote log
. A seguir, vamos explorar como fazer log para um arquivo em vez da saída padrão:
package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
log.Fatal(err)
}
defer file.Close()
log.SetOutput(file)
log.Println("Esta entrada de log vai para um arquivo.")
}
Agora, vamos implementar um caso de uso mais avançado: personalizando o formato de logging. Go permite que você crie um logger personalizado com log.New()
:
package main
import (
"log"
"os"
)
func main() {
logger := log.New(os.Stdout, "LOG PERSONALIZADO: ", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("Esta é uma mensagem de log personalizada.")
}
Saída:
LOG PERSONALIZADO: 2009/11/10 23:00:00 main.go:11: Esta é uma mensagem de log personalizada.
Este exemplo prefixa cada mensagem de log com “LOG PERSONALIZADO: " e inclui a data, a hora e a localização do arquivo fonte.
Aprofundamento
O pacote log
da biblioteca padrão do Go é direto e suficiente para muitas aplicações, mas carece de algumas características mais sofisticadas encontradas em bibliotecas de logging de terceiros, como logging estruturado, rotação de logs e logging baseado em níveis. Pacotes como zap
e logrus
oferecem essas características avançadas e são bem-regardados na comunidade Go por seu desempenho e flexibilidade.
Por exemplo, o logging estruturado permite que você registre dados em um formato estruturado (como JSON), o que é especialmente útil para aplicações modernas baseadas na nuvem, onde os logs podem ser analisados por várias ferramentas ou serviços. zap
, em particular, é conhecido por seu alto desempenho e baixa sobrecarga de alocação, tornando-o adequado para aplicações onde velocidade e eficiência são críticas.
Historicamente, o logging em Go evoluiu significativamente desde a criação da linguagem. As primeiras versões do Go forneciam as capacidades básicas de logging que vemos no pacote log
. No entanto, à medida que a linguagem cresceu em popularidade e a complexidade das aplicações escritas em Go aumentou, a comunidade começou a desenvolver bibliotecas de logging mais sofisticadas para atender às suas necessidades. Hoje, enquanto o pacote log
padrão permanece uma opção viável para aplicações simples, muitos desenvolvedores recorrem a essas soluções de terceiros para requisitos de logging mais complexos.