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

相关推荐
服务端相声演员37 分钟前
Oracle JDK、Open JDK zulu下载地址
java·开发语言
19岁开始学习1 小时前
Go学习-入门
开发语言·学习·golang
一小路一1 小时前
Go Web 开发基础:从入门到实战
服务器·前端·后端·面试·golang
青铜念诗1 小时前
python脚本文件设置进程优先级(在.py文件中实现)
开发语言·python
一念春风1 小时前
C# 背景 透明 抗锯齿 (效果完美)
开发语言·c#
Igallta_8136222 小时前
【小游戏】C++控制台版本俄罗斯轮盘赌
c语言·开发语言·c++·windows·游戏·游戏程序
Dyan_csdn2 小时前
【Python项目】文本相似度计算系统
开发语言·python
pianmian12 小时前
python绘图之回归拟合图
开发语言·python·回归
大G哥2 小时前
用DeepSeek来帮助学习three.js加载3D太极模形
开发语言·前端·javascript·学习·ecmascript
诸神缄默不语2 小时前
Excel如何给单元格填色,以及如何用Python 3实现单元格填色
开发语言·python·excel·openpyxl·patternfill