Gin 笔记(03)— log 输出到控制台和文件、自定义路由日志格式

1. 自定义 log 输出到控制台

func pingResponse(c *gin.Context) {
	c.String(http.StatusOK, "pong")
}

func logFormat(param gin.LogFormatterParams) string {
	// your custom format
	return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
		param.ClientIP,
		param.TimeStamp.Format(time.RFC3339Nano),
		param.Method,
		param.Path,
		param.Request.Proto,
		param.StatusCode,
		param.Latency,
		param.Request.UserAgent(),
		param.ErrorMessage,
	)
}
func main() {
	r := gin.New()
	// LoggerWithFormatter middleware will write the logs to gin.DefaultWriter
	// By default gin.DefaultWriter = os.Stdout
	r.Use(gin.LoggerWithFormatter(logFormat))
	r.GET("/ping", pingResponse)
	r.Run(":8080")
}

输出打印

127.0.0.1 - [2022-07-13T17:16:27.555272739+08:00] "GET /ping HTTP/1.1 200 14.121µs "curl/7.58.0" "
127.0.0.1 - [2022-07-13T17:16:31.300579298+08:00] "GET /ping HTTP/1.1 200 20.821µs "curl/7.58.0" "
127.0.0.1 - [2022-07-13T17:17:22.603013944+08:00] "GET /ping HTTP/1.1 200 2.682488ms "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0" "

2. 自定义 log 输出到文件

func pingResponse(c *gin.Context) {
	c.String(http.StatusOK, "pong")
}

func main() {
	// 禁用控制台颜色,将日志写入文件时不需要控制台颜色。
	gin.DisableConsoleColor()

	// Logging to a file.
	f, _ := os.Create("gin.log")
	gin.DefaultWriter = io.MultiWriter(f)

	// 如果需要同时将日志写入文件和控制台,请使用以下代码。
	// gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

	r := gin.Default()
	r.GET("/ping", pingResponse)

	r.Run(":8080")
}

3. 自定义路由日志格式

如果想以给定的格式(如JSON、键值或其他)记录这些信息,那么可以用 gin.DebugPrintRouteFunc定义这种格式。在下面的例子中,我们用标准的日志包来记录所有的路线,但你可以使用其他适合你需要的日志工具。

func main() {
	r := gin.Default()
	gin.DebugPrintRouteFunc = func(httpMethod, absolutePath, handlerName string, nuHandlers int) {
		log.Printf("endpoint %v %v %v %v\n", httpMethod, absolutePath, handlerName, nuHandlers)
	}

	r.POST("/foo", func(c *gin.Context) {
		c.JSON(http.StatusOK, "foo")
	})

	r.GET("/bar", func(c *gin.Context) {
		c.JSON(http.StatusOK, "bar")
	})

	r.Run()
}

输出打印:

...

2022/07/13 20:08:02 endpoint POST /foo main.main.func2 3
2022/07/13 20:08:02 endpoint GET /bar main.main.func3 3
2022/07/13 20:08:02 endpoint GET /status main.main.func4 3
...

4. 带颜色输出日志到控制台

func main() {
    // 启用控制台颜色
    gin.ForceConsoleColor()
    router := gin.Default()

    router.GET("/ping", func(c *gin.Context) {
        c.String(200, "pong")
    })

    router.Run(":8080")
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值