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")
}