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

Pau*_*Lam 8 go-gin

我有一堆路由并从 gin 开始gin.Default()(默认情况下为所有路由启用日志记录和恢复)。但是有一条路线(即/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()

}
Run Code Online (Sandbox Code Playgroud)

Pau*_*Lam 7

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

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

这就是诀窍。


Cal*_*oss 7

还有一个gin.LoggerWithConfig中间件:

router.Use(gin.LoggerWithConfig(gin.LoggerConfig{SkipPaths: []string{"/static"}}))
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)


Kan*_*hal 6

@Paul Lam 的解决方案有效!继承人代码供参考:

    router := gin. Default()
Run Code Online (Sandbox Code Playgroud)

成为

    router := gin.New()
    router.Use(
        gin.LoggerWithWriter(gin.DefaultWriter, "/pathsNotToLog/"),
        gin.Recovery(),
    )
Run Code Online (Sandbox Code Playgroud)

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