gin框架中自定义向log中写入调试信息

本文介绍了在Gin框架中如何自定义向日志文件写入调试信息。通过设置gin.DefaultWriter为自定义的io.Writer,可以在程序中按照需求记录日志。示例代码展示了具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在项目的调试过程中,需要将一些自定义信息写入到log文件中,gin框架中提供了基础的Logger()方法,查看gin的文档,有如下信息:

 

How to write log file

func main() {
    // Disable Console Color, you don't need console color when writing the logs to file.
    gin.DisableConsoleColor()

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

    // Use the following code if you need to write the logs to file and console at the same time.
    // gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

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

    router.Run(":8080")
}

可以看到gin是通过DefaultWriter来确定日志写入的,查看代码(gin/mode.go中)如下:

// DefaultWriter is the default io.Writer used the Gin for debug output and
// middleware output like Logger() or Recovery().
// Note that both Logger and Recovery provides custom ways to configure their
// output io.Writer.
// To support coloring in Windows use:
// 		import "github.com/mattn/go-colorable"
// 		gin.DefaultWriter = colorable.NewColorableStdout()
var DefaultWriter io.Writer = os.Stdout
var DefaultErrorWriter io.Writer = os.Stderr

DefaultWriter是包外可见的变量,类型是io.Writer,在gin自己的Logger中调用方法如下:

fmt.Fprintf(out, "[GIN] %v |%s %3d %s| %13v | %15s |%s %-7s %s %s\n%s",
  end.Format("2006/01/02 - 15:04:05"),
  statusColor, statusCode, resetColor,
  latency,
  clientIP,
  methodColor, method, resetColor,
  path,
  comment,
)

其中参数out就是要写入的io.Writer。上边的方法就是我们平常在gin框架下看到的日志信息格式,例如:

 

[GIN] 2018/06/27 - 17:01:33 | 200 |   12.475702ms |       127.0.0.1 | GET      /api/v1/tags

所以如果需要自己在程序中写入日志信息的话,需要在设置gin.DefaultWriter之后,在方法中向其写入信息即可,如:

 

fmt.Fprintln(gin.DefaultWriter, "foo bar")

当然,在实际项目中,可以将该方法进行包装抽象,方便使用。

示例代码:https://play.golang.org/p/UC2ek8ti2E_n

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值