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

我们在项目的调试过程中,需要将一些自定义信息写入到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")

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


猜你喜欢

转载自blog.csdn.net/yuanlaidewo000/article/details/80832019