Pular para o conteúdo

Como escrever arquivo de log

Escrever logs em arquivo é essencial para aplicações em produção onde você precisa reter o histórico de requisições para debugging, auditoria ou monitoramento. Por padrão, o Gin escreve toda a saída de log em os.Stdout. Você pode redirecionar isso definindo gin.DefaultWriter antes de criar o roteador.

package main
import (
"io"
"os"
"github.com/gin-gonic/gin"
)
func main() {
// Disable Console Color, you don't need console color when writing the logs to file.
gin.DisableConsoleColor()
// Logging to a file.
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
// Use the following code if you need to write the logs to file and console at the same time.
// gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
router.Run(":8080")
}

Escrevendo para arquivo e console

A função io.MultiWriter da biblioteca padrão do Go aceita múltiplos valores io.Writer e duplica as escritas para todos eles. Isso é útil durante o desenvolvimento quando você quer ver os logs no terminal enquanto também os persiste no disco:

f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

Com essa configuração, cada entrada de log é escrita tanto em gin.log quanto no console simultaneamente.

Rotação de log em produção

O exemplo acima usa os.Create, que trunca o arquivo de log cada vez que a aplicação inicia. Em produção, você tipicamente quer adicionar aos logs existentes e rotacionar arquivos baseado em tamanho ou tempo. Considere usar uma biblioteca de rotação de logs como lumberjack:

import "gopkg.in/natefinch/lumberjack.v2"
func main() {
gin.DisableConsoleColor()
gin.DefaultWriter = &lumberjack.Logger{
Filename: "gin.log",
MaxSize: 100, // megabytes
MaxBackups: 3,
MaxAge: 28, // days
}
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
router.Run(":8080")
}

Veja também