網(wǎng)站制作的合同百度指數(shù)查詢排行榜
結(jié)合 Logrus 和 Lumberjack,可以創(chuàng)建一個高效的日志中間件,用于記錄請求和響應(yīng)。以下是實現(xiàn)步驟:
1. 安裝依賴
首先,確保安裝了 Logrus 和 Lumberjack:
go get github.com/sirupsen/logrus
go get gopkg.in/natefinch/lumberjack.v2
2. 創(chuàng)建日志中間件
創(chuàng)建一個日志中間件,使用 Logrus 記錄請求信息,并使用 Lumberjack 實現(xiàn)日志輪轉(zhuǎn):
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() // 繼續(xù)處理請求logger.WithFields(logrus.Fields{"status": c.Writer.Status(),"method": c.Request.Method,"path": c.Request.URL.Path,}).Info("Response sent")}
}
3. 使用中間件
在主函數(shù)中注冊日志中間件:
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 創(chuàng)建日志中間件的實現(xiàn):
package mainimport ("github.com/gin-gonic/gin""github.com/sirupsen/logrus""gopkg.in/natefinch/lumberjack.v2""net/http"
)// 設(shè)置 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() // 繼續(xù)處理請求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 進行日志輪轉(zhuǎn)。
- LoggerMiddleware:記錄請求的 HTTP 方法和路徑,以及響應(yīng)狀態(tài)。
- main:創(chuàng)建 Gin 引擎,注冊日志中間件,并設(shè)置一個簡單的
/ping
路由。
在運行代碼之前,請確保創(chuàng)建一個名為 log
的文件夾,以便日志文件能夠正確保存。運行后,您將在 log/gin.log
中找到日志記錄。
總結(jié)
上述代碼展示了如何結(jié)合 Logrus 和 Lumberjack 創(chuàng)建一個日志中間件,記錄請求和響應(yīng)信息,并實現(xiàn)日志文件的輪轉(zhuǎn)管理。這種方式使得日志管理更加高效和靈活。