14-Gin日志.md

一 Gin将日志写入控制台和文件中

方式一:直接配置方式

package main

import (
   "github.com/gin-gonic/gin"
   "io"
   "os"
)

func main() {
   //1 禁用控制台颜色
   gin.DisableConsoleColor()
   //2  创建记录日志的文件
   f, _ := os.OpenFile("./app.log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
   // 写入到文件和控制台
   gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

   //3  线上模式,控制台不会打印信息
   //gin.DefaultWriter = f
   //gin.SetMode(gin.ReleaseMode)
   
   router := gin.Default()
   router.GET("/", func(c *gin.Context) {
      c.String(200, "index")
   })

   router.Run(":8080")
}

方式二:中间件方式

package main

import (
	"github.com/gin-gonic/gin"
	"io"
	"os"
)

func main() {
	router := gin.New()
	f, _ := os.OpenFile("./aa.log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
	router.Use(gin.LoggerWithWriter(io.MultiWriter(f,os.Stdout)))
	router.Use(gin.Recovery())
	router.GET("/", func(c *gin.Context) {
		c.String(200, "index")
	})
	router.Run(":8080")
}

二 Gin日志格式定制

通过gin.LoggerWithFormatter(formatter)中间件

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
)

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

   // LoggerWithFormatter 中间件会将日志写入 gin.DefaultWriter,也就是os.Stdout
   //gin.LoggerWithFormatter中间件,需要传入LogFormatter变量,是一个函数func(params LogFormatterParams) string类型

   var formatter = func(param gin.LogFormatterParams) string {
      return fmt.Sprintf("客户端IP:%s,请求时间:[%s],请求方式:%s,请求地址:%s,http协议版本:%s,请求状态码:%d,响应时间:%s,客户端:%s,错误信息:%s\n",
         param.ClientIP,
         param.TimeStamp.Format("2006年01月02日 15:03:04"),
         param.Method,
         param.Path,
         param.Request.Proto,
         param.StatusCode,
         param.Latency,
         param.Request.UserAgent(),
         param.ErrorMessage,
      )
   }
   router.Use(gin.LoggerWithFormatter(formatter))
   router.Use(gin.Recovery())

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

   router.Run(":8080")
}

通过gin.LoggerWithConfig(conf)中间件

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "io"
   "os"
)

func main() {
   router := gin.New()
   // 使用LoggerWithConfig中间件,传入LoggerConfig结构体,有Formatter参数:是一个函数,Output参数:是输出位置
   f, _ := os.OpenFile("gin.log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
   var conf = gin.LoggerConfig{
      Formatter: func(param gin.LogFormatterParams) string {
         return fmt.Sprintf("客户端IP:%s,请求时间:[%s],请求方式:%s,请求地址:%s,http协议版本:%s,请求状态码:%d,响应时间:%s,客户端:%s,错误信息:%s\n",
            param.ClientIP,
            param.TimeStamp.Format("2006年01月02日 15:03:04"),
            param.Method,
            param.Path,
            param.Request.Proto,
            param.StatusCode,
            param.Latency,
            param.Request.UserAgent(),
            param.ErrorMessage,
         )
      },
      Output: io.MultiWriter(os.Stdout, f),
   }
   router.Use(gin.LoggerWithConfig(conf))
   router.Use(gin.Recovery())

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

   router.Run(":8080")
}
posted @ 2022-05-07 23:35  刘清政  阅读(239)  评论(0编辑  收藏  举报