前言

为了便于精准排查问题,需要将当前的请求信息与当前执行的 sql 信息设置对应关系记录下来,记录的 sql 信息包括:

  • 执行 sql 的当前时间;
  • 执行 sql 的文件地址和行号;
  • 执行 sql 的花费时长;
  • 执行 sql 的影响行数;
  • 执行的 sql 语句;

数据库组件使用的是gorm

思路

1、在执行 sql 前,设置开始执行时间(计算执行时长会用到);

2、在执行 sql 后,第一,获取当前请求的上下文,为什么获取上下文,因为需要从上下文中获取本次请求信息,第二,获取 sql 执行前的时间,用来计算执行时长,第三,获取执行的 sql 信息,然后将数据设置到trace中,trace是项目中链路包,后面文章会对其介绍;

上面需要用到gorm两个 知识点 callbackscontext,这两个是在gorm v2才有的,需要 import 的包为gorm.io/gorm

演示代码

context的传递需要使用gorm v2提供的withcontext()方法。

编写callbacks插件代码,gorm 的 plugin 接口的编写非常简单,只需要实现两个方法即可。

下面是我写的插件代码:

最后,在 db 连接的时候使用这个插件:

效果

小结

这是编写的trace包的一部分,这个包可以记录这些信息(json 格式):

  • 支持设置 trace_id
  • 支持设置 request 信息
  • 支持设置 response 信息
  • 支持设置 third_party_requests 三方请求信息
  • 支持设置 debugs 打印调试信息
  • 支持设置 sqls 执行 sql 信息
  • 可记录 cost_seconds 执行时长

以上代码在 go-gin-api 项目中,地址:

github.com/xinliangnote/go-gin-api

到此这篇关于go基于gorm 获取当前请求所执行的 sql 信息的文章就介绍到这了,更多相关go 获取当前请求所执行的 sql 信息内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!