我们在项目的调试过程中,需要将一些自定义信息写入到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")
当然,在实际项目中,可以将该方法进行包装抽象,方便使用。