Golang Gin 框架之日志 DIY(七)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章介绍了 Gin 中间件的相关内容,今天我们详细看一看 Gin 在日志管理模块方面的内容。

目录

  • 前言
  • 正文
  • 写日志文件
  • 自定义日志输出格式
  • 结尾

前言

Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章介绍了 Gin 中间件的相关内容,今天我们详细看一看 Gin 在日志管理模块方面的内容。

正文

写日志文件

在服务端有持续化存储的日志非常有必要,因为我们需要对历史问题进行排查,日志是我们必备的辅助工具。利用 Gin 框架,我们可以非常简单的完成日志收集工作,下面是示例代码:

funcmain() {
// 不启动颜色控制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 自身日志模块的输出内容和日志文件进行绑定,实现记录历史日志的功能。

自定义日志输出格式

上面我们实现了把日志保存到文件中的功能,那么我们可以定义其中的日志输出格式吗?答案是肯定,而且我们还可以非常灵活的实现日志输出格式的定义。

funcmain() {
router :=gin.New()
router.Use(gin.LoggerWithFormatter(func(paramgin.LogFormatterParams) string {
// 自定义日志输出格式returnfmt.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" "
复制代码

演示效果截图:

image.png

通过上述结果可以看到,我们自定义的日志输出格式已经生效了,OK,大功告成!

结尾

好了,今天关于 Gin 框架的日志管理的内容就介绍这么多,感兴趣的话,就自己动手 DIY 一下吧!



作者简介:大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,同时也是CSDN博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
13天前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
1月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
27 3
Golang语言之Prometheus的日志模块使用案例
|
16天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
29天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
114 1
|
1月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
2月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
2月前
|
JSON Go API
一文搞懂 Golang 高性能日志库 - Zap
一文搞懂 Golang 高性能日志库 - Zap
67 2
|
2月前
|
人工智能 数据库连接 Go
Golang 搭建 WebSocket 应用(五) - 消息推送日志
Golang 搭建 WebSocket 应用(五) - 消息推送日志
25 1
|
2月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。