1. 控制日志输出颜色

我们知道,在Gin开发中,当您启动程序时,会在终端控制台中输出一些日志,默认情况下,控制台上的日志输出应根据检测到的TTY进行着色。

但是,您也可将终端控制台的日志设置为从不着色。比如:
package main


import (
"net/http"


"github.com/gin-gonic/gin"
)


func main() {
// 禁用控制台log颜色
gin.DisableConsoleColor()


r := gin.Default()


r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})


r.Run(":8080")
}

运行起来,访问127.0.0.1:8080/ping,可看到输出颜色被禁用:


您也可以设置为日志始终着色:
package main


import (
"net/http"


"github.com/gin-gonic/gin"
)


func main() {
// 始终为日志着色:
gin.ForceConsoleColor()


r := gin.Default()


r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})


r.Run(":8080")
}

同样,访问127.0.0.1:8080/ping,可以看到输出颜色:

■ ■■■■

[GIN-debug] POST   /foo                      --> main.main.func1 (3 handlers)
[GIN-debug] GET /bar --> main.main.func2 (3 handlers)
[GIN-debug] GET /status --> main.main.func3 (3 handlers)
package main


import (
"log"
"net/http"


"github.com/gin-gonic/gin"
)


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.GET("/status", func(c *gin.Context) {
c.JSON(http.StatusOK, "ok")
})


r.Run()
}
// custom logfile


package main


import (
"fmt"
"time"


"github.com/gin-gonic/gin"
)


func main() {
r := gin.New()


//
r.Use(gin.LoggerWithFormatter(func(params gin.LogFormatterParams) string {
// 你的自定义格式
return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
params.ClientIP,
params.TimeStamp.Format(time.RFC1123),
params.Method,
params.Path,
params.Request.Proto,
params.StatusCode,
params.Latency,
params.Request.UserAgent(),
params.ErrorMessage,
)
}))


r.Use(gin.Recovery())


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


r.Run(":8080")
}


代码运行起来,在访问127.0.0.1:8080/ping时,日志输出变为了设置的格式:


■ ■■■■


4. 如何写日志文件

如果您想要设置一个自己的全局 Middleware,那么您可以参考如下示例:
// 如何写日志文件


package main


import (
"io"
"os"


"github.com/gin-gonic/gin"
)


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


// 记录到文件中
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)


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


r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})


r.Run(":8080")
}

将代码跑起来,访问一下,看得到终端控制台的日志: