gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件

结合 Logrus 和 Lumberjack,可以创建一个高效的日志中间件,用于记录请求和响应。以下是实现步骤:

1. 安装依赖

首先,确保安装了 Logrus 和 Lumberjack:

bash 复制代码
go get github.com/sirupsen/logrus
go get gopkg.in/natefinch/lumberjack.v2
2. 创建日志中间件

创建一个日志中间件,使用 Logrus 记录请求信息,并使用 Lumberjack 实现日志轮转:

go 复制代码
package main

import (
    "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, // MB
        MaxBackups: 3,
        MaxAge:     28, // days
        Compress:   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. 使用中间件

在主函数中注册日志中间件:

go 复制代码
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 创建日志中间件的实现:

go 复制代码
package main

import (
    "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, // MB
        MaxBackups: 3,
        MaxAge:     28, // days
        Compress:   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")
}

代码说明

  1. SetupLogger:配置 Logrus 使用 Lumberjack 进行日志轮转。
  2. LoggerMiddleware:记录请求的 HTTP 方法和路径,以及响应状态。
  3. main :创建 Gin 引擎,注册日志中间件,并设置一个简单的 /ping 路由。

在运行代码之前,请确保创建一个名为 log 的文件夹,以便日志文件能够正确保存。运行后,您将在 log/gin.log 中找到日志记录。

总结

上述代码展示了如何结合 Logrus 和 Lumberjack 创建一个日志中间件,记录请求和响应信息,并实现日志文件的轮转管理。这种方式使得日志管理更加高效和灵活。

相关推荐
Dream_Snowar36 分钟前
速通Python 第三节
开发语言·python
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
信号处理学渣2 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客2 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s2 小时前
Pandas
开发语言·python
biomooc2 小时前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人2 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
black^sugar2 小时前
纯前端实现更新检测
开发语言·前端·javascript
404NooFound3 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
njnu@liyong3 小时前
图解HTTP-HTTP报文
网络协议·计算机网络·http