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")}分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 89 天
部分内容可能已过时