donnie4w / go-logger

go高性能日志库, 支持日志格式化, 文件切割,压缩等特性
https://tlnet.top/logdoc
BSD 3-Clause "New" or "Revised" License
279 stars 103 forks source link

请问该如何与gin集成? #34

Closed Bronya0 closed 2 months ago

Bronya0 commented 2 months ago
func GinLogger() gin.HandlerFunc {
    return func(c *gin.Context) {

        // 获取请求信息
        method := c.Request.Method
        url := c.Request.RequestURI
        statusCode := c.Writer.Status()

        // 记录日志
        if statusCode >= 500 {
            logger.Logger.Error(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
        } else if statusCode >= 400 {
            logger.Logger.Warn(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
        } else {
            logger.Logger.Info(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
        }

        // 继续执行后续的中间件和路由
        c.Next()
    }
}

这样是否可以

donnie4w commented 2 months ago

@Bronya0 是的,可以这样集成 不过,logger的函数调用似乎有点问题

  1. logger.Logger 中Logger 不是 go-logger直接提供的对象。这么写我没太看明白。
  2. 字符串拼接全部默认用fmt.Sprintf 可能性能不是很好,go-logger支持多参数传输,可以不用拼接参数
logger函数调用部分可以修改一下
if statusCode >= 500 {
    //logger.Logger.Error(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
    logger.Error("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
} else if statusCode >= 400 {
    //logger.Logger.Warn(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
    logger.Warn("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
} else {
    //logger.Logger.Info(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
    logger.Info("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
}

import "github.com/donnie4w/go-logger/logger" 一般导入之后,直接调用logger日志函数即可

Bronya0 commented 2 months ago

@Bronya0 是的,可以这样集成 不过,logger的函数调用似乎有点问题

  1. logger.Logger 中Logger 不是 go-logger直接提供的对象。这么写我没太看明白。
  2. 字符串拼接全部默认用fmt.Sprintf 可能性能不是很好,go-logger支持多参数传输,可以不用拼接参数
logger函数调用部分可以修改一下
if statusCode >= 500 {
  //logger.Logger.Error(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
  logger.Error("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
} else if statusCode >= 400 {
  //logger.Logger.Warn(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
  logger.Warn("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
} else {
  //logger.Logger.Info(fmt.Sprintf("Method: %s, URL: %s, Status: %d", method, url, statusCode))
  logger.Info("Method: ", method, ", URL: ", url, ", Status: ", statusCode)
}

导入“github.com/donnie4w/go-logger/logger” 一般导入之后,直接调用logger日志函数即可

logger.Logger是我NewLogger()创建的go-logger实例,在这里引用的。我明白了,感谢