写点什么

Golang Gin 框架之日志 DIY(七)

作者:liuzhen007
  • 2021 年 12 月 04 日
  • 本文字数:1483 字

    阅读完需:约 5 分钟

Golang Gin 框架之日志 DIY(七)

目录


  • 前言

  • 正文

  • 写日志文件

  • 自定义日志输出格式

  • 结尾

前言

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 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!

发布于: 2 小时前阅读数: 6
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
Golang Gin 框架之日志 DIY(七)