Gin使用logrus包进行日志输出

161 阅读1分钟

代码:

package main

import (
	"time"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
)

func LoggerMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 记录请求开始时间
		start := time.Now()
		// 处理请求
		c.Next()
		// 计算请求处理时间
		latency := time.Since(start)
		statusCode := c.Writer.Status()
		clientIP := c.ClientIP()
		method := c.Request.Method
		path := c.Request.URL.Path
		logrus.WithFields(logrus.Fields{
			"status":  statusCode,
			"latency": latency,
			"ip":      clientIP,
			"method":  method,
			"path":    path,
		}).Info("Request completed")
	}
}


func main() {
	router := gin.Default()
	// 添加日志中间件
	router.Use(LoggerMiddleware())
	// 定义一个简单的路由
	router.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	router.Run(":8080")
}

调试控制台输出示例:

time="2024-10-30T17:46:29+08:00" level=info msg="Request completed" ip=127.0.0.1 latency=0s method=GET path=/ping status=200
[GIN] 2024/10/30 - 17:46:29 | 200 |       898.6µs |       127.0.0.1 | GET      "/ping"
time="2024-10-30T17:46:32+08:00" level=info msg="Request completed" ip=127.0.0.1 latency=0s method=GET path=/ping status=200
[GIN] 2024/10/30 - 17:46:32 | 200 |         198µs |       127.0.0.1 | GET      "/ping"
time="2024-10-30T17:46:32+08:00" level=info msg="Request completed" ip=127.0.0.1 latency=0s method=GET path=/ping status=200
[GIN] 2024/10/30 - 17:46:32 | 200 |        85.9µs |       127.0.0.1 | GET      "/ping"

说明:

1.用到三个包,go内置的time包,第三方包:gin框架包和logrus包。

2.使用gin创建服务器后,用Use方法添加中间件函数LoggerMiddleware。

3.LoggerMiddleware函数中,logrus包的操作方法依赖gin包的功能,该函数返回一个匿名函数,匿名函数的参数为*gin.Context类型,用于处理http请求。

4.logrus.WithFields是logrus日志库中的一个方法,用于创建一个新的日志记录器并添加一些字段信息到日志中。

5.logrus.Fields各个参数解释:

  • status:请求状态码,如200,404等
  • latency:请求用时
  • ip:客户端ip地址
  • method:请求方法
  • path:请求路径