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

相关推荐
网络抓包与爬虫22 分钟前
android应用崩溃了,通过崩溃手机连接电脑查找日志方法
websocket·网络协议·tcp/ip·http·网络安全·https·udp
Min_小明34 分钟前
CMake 简单使用总结
android·开发语言·算法
demonlg011238 分钟前
Go 语言标准库中strings和strconv详细功能介绍与示例
开发语言·后端·云原生·golang
__XYZ1 小时前
Vala 编程语言教程-继承
c语言·开发语言·c++·c#
郭涤生1 小时前
Chapter 3: Programming Paradigms_《clean architecture》notes
java·开发语言·c++·笔记
米芝鱼1 小时前
LearnOpenGL(九)自定义转换类
开发语言·c++·算法·游戏·图形渲染·shader·opengl
YGGP1 小时前
Golang 的 GMP 调度机制常见问题及解答
开发语言·网络·golang
woai33642 小时前
设计模式-单例模式
java·开发语言·单例模式
南林yan2 小时前
应用层协议HTTP
网络·网络协议·http
始终奔跑在路上2 小时前
Spring Initializr搭建spring boot项目
java·开发语言·spring boot·spring·软件开发