Go 高级日志记录库&集成Gin框架
package main
import (
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// 初始化Zap日志库
func initLogger() (*zap.Logger, error) {
// 这里应该是配置的JSON字符串,示例配置省略
return zap.Config{}.Build()
}
func main() {
logger, err := initLogger()
if err != nil {
panic(err)
}
defer logger.Sync()
r := gin.Default()
// 使用中间件记录请求日志
r.Use(gin.LoggerWithConfig(gin.LoggerConfig{
SkipPaths: []string{"/health"}, // 跳过这些路径的日志记录
Formatter: func(logger *zap.Logger) gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
path := c.Request.URL.Path
c.Next()
end := time.Now()
latency := end.Sub(start)
logger.Info("HTTP请求记录",
zap.String("method", c.Request.Method),
zap.String("path", path),
zap.Int("status", c.Writer.Status()),
zap.String("ip", c.ClientIP()),
zap.String("user-agent", c.Request.UserAgent()),
zap.Duration("latency", latency),
)
}
}(logger),
}))
// 自定义错误处理
r.Use(gin.RecoveryWithHandler(func(c *gin.Context, recovered interface{}) {
logger.Error("发生异常",
zap.Any("error", recovered),
zap.String("request_uri", c.Request.RequestURI),
)
c.JSON(500, gin.H{"error": "内部服务器错误"})
}))
// 你的路由和接口定义
// ...
r.Run(":8080")
}
这个示例代码展示了如何在Gin框架中使用Zap日志库来记录HTTP请求和错误。它初始化了一个Zap日志实例,并使用中间件记录每个请求的详细信息。如果发生内部错误,它会使用Zap记录错误并返回一个500响应。这是一个简化的例子,实际应用中可能需要更复杂的配置和错误处理。
评论已关闭