禁用特定 Go-Gin 路由的请求日志记录

Disable request logging for a particular Go-Gin route

我有一堆路由并从 gin.Default() 开始 gin(默认情况下为所有路由启用日志记录和恢复)。但是有一条路线(即 /health)每 5 秒被 ping 一次。在不更改大部分代码的情况下禁用该路由的请求日志记录的直接方法是什么?

func main() {
    // gin is initialized upstream in our internal framework
    // so I can't change this line easily.
    router := gin.Default()

    router.GET("/someGet", getting)
    router.POST("/somePost", posting)
    router.PUT("/somePut", putting)
    router.DELETE("/someDelete", deleting)
    // ... and more

    // Disable request logging for only this route. 
    // Note: I'm hoping that there's some parameter I can pass in here to do that
    route.GET("/health", health)

    router.Run()

}

gin.Logger() 有一个更长的形式,args 可以接受不应记录的字符串列表路径的 args,即 gin.LoggerWithWriter(gin.DefaultWriter, "<NO LOG PATH 1>", ...).

我用 baseService.GinEngine = gin.New() 覆盖了基本结构 GinService,然后手动附加了 gin.LoggerWithWriter(...) 和 gin.Recovery() 中间件。

成功了。

@Paul Lam 的解决方案有效!参考代码如下:

    router := gin. Default()

变成

    router := gin.New()
    router.Use(
        gin.LoggerWithWriter(gin.DefaultWriter, "/pathsNotToLog/"),
        gin.Recovery(),
    )

gin.Default() 定义引用自 github.com/gin-gonic/gin@v1.3.0/gin.go

还有一个gin.LoggerWithConfig中间件:

r.Use(gin.LoggerWithConfig(gin.LoggerConfig{SkipPaths: "/metrics"}))
type LoggerConfig struct {
    // Optional. Default value is gin.defaultLogFormatter
    Formatter LogFormatter

    // Output is a writer where logs are written.
    // Optional. Default value is gin.DefaultWriter.
    Output io.Writer

    // SkipPaths is a url path array which logs are not written.
    // Optional.
    SkipPaths []string
}