gin日志和日志格式
gin日志记录方法
gin提供DefaultWriter方法经行日志记录。
官方代码
func main() {
// 禁用控制台颜色
gin.DisableConsoleColor()
// 创建记录日志的文件
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
// 如果需要将日志同时写入文件和控制台,请使用以下代码
// gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
router.Run(":8080")
}
其中直接执行,结果会写在日志,但不会在控制台输出,如果需要将日志同时写入文件和控制台。
需要在MultiWriter方法中加入方法参数os.Stdout
实验代码
只写入日志
package main
import (
"github.com/gin-gonic/gin"
"io"
"os"
)
func main() {
log, _ := os.Create("./log/gin.log")
gin.DefaultWriter = io.MultiWriter(log)
r := gin.Default()
r.GET("/testLog", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "testLog",
})
})
r.Run()
}
控制台没有信息
log文件中存入所有信息
控制台与log同时记录
func main() {
log, _ := os.Create("./log/gin.log")
gin.DefaultWriter = io.MultiWriter(log, os.Stdout)
r := gin.Default()
r.GET("/testLog", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "testLog",
})
})
r.Run()
}
同时记录信息。
自定义日志
想要定义格式与规则,需要自定义日志
官方代码
func main() {
router := gin.New()
// LoggerWithFormatter 中间件会将日志写入 gin.DefaultWriter
// By default gin.DefaultWriter = os.Stdout
router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
// 你的自定义格式
return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
param.ClientIP,
param.TimeStamp.Format(time.RFC1123),
param.Method,
param.Path,
param.Request.Proto,
param.StatusCode,
param.Latency,
param.Request.UserAgent(),
param.ErrorMessage,
)
}))
router.Use(gin.Recovery())
router.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
router.Run(":8080")
}
在平时使用中,个人觉得gin中的日志耦合性有点强,他会添加在中间件中,不用的时候要重新开Default路由
第三方日志工具
go-logging,logrus,zap都是比较好用的第三方日志工具。
本人暂时使用logrus进行日志学习,其他日志工具后续在进行学习。
由于logrus框架应用稍显复杂,会在单独一篇博客中单独记录学习。