目录
前言
Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章介绍了 Gin 中间件的相关内容,今天我们详细看一看 Gin 在日志管理模块方面的内容。
正文
写日志文件
在服务端有持续化存储的日志非常有必要,因为我们需要对历史问题进行排查,日志是我们必备的辅助工具。利用 Gin 框架,我们可以非常简单的完成日志收集工作,下面是示例代码:
func main() {
// 不启动颜色控制
gin.DisableConsoleColor()
// 创建日志文件
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
// 使用如下代码,可以实现日志文件记录和 console 同步显示
// 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.log 的日志文件,同时将 Gin 自身日志模块的输出内容和日志文件进行绑定,实现记录历史日志的功能。
自定义日志输出格式
上面我们实现了把日志保存到文件中的功能,那么我们可以定义其中的日志输出格式吗?答案是肯定,而且我们还可以非常灵活的实现日志输出格式的定义。
func main() {
router := gin.New()
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")
}
复制代码
如上述代码所示,我们定义了日志格式包含了 param.ClientIP(客户端 IP),param.TimeStamp.Format(time.RFC1123)(时间戳),param.Method(接口请求类型),param.Path(API 路由),param.Request.Proto(协议),param.StatusCode(结果状态码,正常是 200),param.Latency(延时),param.Request.UserAgent()(客户端类型),param.ErrorMessage(错误信息)。
我们分别使用 curl 和 chrome 去接请求上述 /ping 接口进行效果测试,下面是服务器端的日志结果:
::1 - [Sat, 27 Nov 2021 17:04:22 CST] "GET /ping HTTP/1.1 200 84.952µs "curl/7.64.1" "
::1 - [Sat, 27 Nov 2021 17:21:14 CST] "GET /ping HTTP/1.1 200 53.335µs "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "
::1 - [Sat, 27 Nov 2021 17:21:15 CST] "GET /favicon.ico HTTP/1.1 404 650ns "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "
复制代码
演示效果截图:
通过上述结果可以看到,我们自定义的日志输出格式已经生效了,OK,大功告成!
结尾
好了,今天关于 Gin 框架的日志管理的内容就介绍这么多,感兴趣的话,就自己动手 DIY 一下吧!
作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!
评论