201 字
1 分钟
日志系统

自定义日志格式#

func main() {
r := gin.New()
// 自定义日志格式
r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
return fmt.Sprintf("[%s] %s %s %d %s %s\n",
param.TimeStamp.Format("2006-01-02 15:04:05"),
param.Method,
param.Path,
param.StatusCode,
param.Latency,
param.ErrorMessage,
)
}))
r.Use(gin.Recovery())
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
r.Run(":8080")
}

日志写入文件#

func main() {
// 创建日志文件
f, _ := os.Create("gin.log")
// 同时打印和写入文件
gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
// 只写入文件,不会打印
// gin.DefaultWriter = f
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
r.Run(":8080")
}

使用 Zap 日志库#

import (
"go.uber.org/zap"
)
var logger *zap.Logger
func InitLogger() {
var err error
logger, err = zap.NewProduction()
if err != nil {
panic(err)
}
}
func LoggerMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
path := c.Request.URL.Path
query := c.Request.URL.RawQuery
c.Next()
latency := time.Since(start)
logger.Info("Request",
zap.String("method", c.Request.Method),
zap.String("path", path),
zap.String("query", query),
zap.Int("status", c.Writer.Status()),
zap.Duration("latency", latency),
zap.String("ip", c.ClientIP()),
)
}
}
func main() {
InitLogger()
defer logger.Sync()
r := gin.New()
r.Use(LoggerMiddleware())
r.Use(gin.Recovery())
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
r.Run(":8080")
}
日志系统
https://shirone.mysqil.com/posts/gin/日志系统/
作者
HikariTish
发布于
2026-07-18
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取