结合 Logrus 和 Lumberjack,可以创建一个高效的日志中间件,用于记录请求和响应。以下是实现步骤:
1. 安装依赖
首先,确保安装了 Logrus 和 Lumberjack:
go get github.com/sirupsen/logrus
go get gopkg.in/natefinch/lumberjack.v2
2. 创建日志中间件
创建一个日志中间件,使用 Logrus 记录请求信息,并使用 Lumberjack 实现日志轮转:
package mainimport ("github.com/gin-gonic/gin""github.com/sirupsen/logrus""gopkg.in/natefinch/lumberjack.v2""net/http"
)func SetupLogger() *logrus.Logger {logger := logrus.New()logger.SetOutput(&lumberjack.Logger{Filename: "log/gin.log",MaxSize: 10, // MBMaxBackups: 3,MaxAge: 28, // daysCompress: true,})logger.SetFormatter(&logrus.TextFormatter{FullTimestamp: true,})return logger
}func LoggerMiddleware(logger *logrus.Logger) gin.HandlerFunc {return func(c *gin.Context) {logger.WithFields(logrus.Fields{"method": c.Request.Method,"path": c.Request.URL.Path,}).Info("Request received")c.Next() // 继续处理请求logger.WithFields(logrus.Fields{"status": c.Writer.Status(),"method": c.Request.Method,"path": c.Request.URL.Path,}).Info("Response sent")}
}
3. 使用中间件
在主函数中注册日志中间件:
func main() {r := gin.Default()logger := SetupLogger()r.Use(LoggerMiddleware(logger))r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong"})})r.Run(":8080")
}
以下是汇总后的完整代码,包括使用 Logrus 和 Lumberjack 创建日志中间件的实现:
package mainimport ("github.com/gin-gonic/gin""github.com/sirupsen/logrus""gopkg.in/natefinch/lumberjack.v2""net/http"
)// 设置 Logger
func SetupLogger() *logrus.Logger {logger := logrus.New()logger.SetOutput(&lumberjack.Logger{Filename: "log/gin.log",MaxSize: 10, // MBMaxBackups: 3,MaxAge: 28, // daysCompress: true,})logger.SetFormatter(&logrus.TextFormatter{FullTimestamp: true,})return logger
}// 日志中间件
func LoggerMiddleware(logger *logrus.Logger) gin.HandlerFunc {return func(c *gin.Context) {logger.WithFields(logrus.Fields{"method": c.Request.Method,"path": c.Request.URL.Path,}).Info("Request received")c.Next() // 继续处理请求logger.WithFields(logrus.Fields{"status": c.Writer.Status(),"method": c.Request.Method,"path": c.Request.URL.Path,}).Info("Response sent")}
}func main() {r := gin.Default()logger := SetupLogger()r.Use(LoggerMiddleware(logger))r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong"})})r.Run(":8080")
}
代码说明
- SetupLogger:配置 Logrus 使用 Lumberjack 进行日志轮转。
- LoggerMiddleware:记录请求的 HTTP 方法和路径,以及响应状态。
- main:创建 Gin 引擎,注册日志中间件,并设置一个简单的
/ping
路由。
在运行代码之前,请确保创建一个名为 log
的文件夹,以便日志文件能够正确保存。运行后,您将在 log/gin.log
中找到日志记录。
总结
上述代码展示了如何结合 Logrus 和 Lumberjack 创建一个日志中间件,记录请求和响应信息,并实现日志文件的轮转管理。这种方式使得日志管理更加高效和灵活。