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 创建一个日志中间件,记录请求和响应信息,并实现日志文件的轮转管理。这种方式使得日志管理更加高效和灵活。

相关推荐
代码中介商2 分钟前
C++ 预约系统实战(一):项目总览与 C/S 架构设计
c语言·开发语言·c++
我叫汪枫9 分钟前
RAG 进阶:切分、检索、重排序,以及它和 Agent、微调、MCP 都是什么关系
开发语言·python
Lhappy嘻嘻12 分钟前
网络(六)|应用层 HTTP&HTTPS:URL、请求响应、Cookie 与证书
网络·http·https
弘毅 失败的 mian19 分钟前
数组和指针基础
c语言·开发语言·经验分享·笔记
ai小陈28 分钟前
Python 3.12与CUDA 12.8镜像实战:启动GPU实例后的五项自检
开发语言·人工智能·python·深度学习·ai·gpu算力
AZaLEan__1 小时前
ts接口梳理
开发语言
蓝桉柒71 小时前
java判断语句
java·开发语言
Lost of 程序猿1 小时前
M2 实战:询价与采购订单聚合落地——跨聚合一致性、领域事件与 Outbox
开发语言·c#·asp.net·.net
速易达网络1 小时前
用 Three.js 打造一座会呼吸的海岛:海风之屿飞艇巡航的技术实现
开发语言·javascript·ecmascript
yujunl1 小时前
U9 BE插件的调试
开发语言