前言

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

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

数据库组件使用的是。

思路

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

TraceTrace
GORMCallbacksContextGORM V2gorm.io/gorm

演示代码

ContextGORM V2WithContext()
CallBacks

下面是我写的插件代码:

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

效果

Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解)

小结

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

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

github.com/xinliangnote/go-gin-api