• 14Gin日志.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")
    }
    
  • 相关阅读:
    一款简单易用的.Net 断言测试框架 : Shouldly
    单元测试 使用 Effort 内存数据库 报错
    解决 对路径bin oslyn..的访问被拒绝
    数据库设计:多选查询与匹配
    oracle快速创建主键
    models中,字段参数limit_choices_to的用法
    models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
    Django ModelForm组件
    会议室预定
    Django admin管理工具
  • 原文地址:https://www.cnblogs.com/liuqingzheng/p/16244540.html
Copyright © 2020-2023  润新知