You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看Go GORM执行时运行的SQL查询语句?

Go-GORM 配置记录执行的SQL语句

要在Go-GORM中记录执行的精确SQL(包含实际参数值),可以通过以下方式配置:

1. 使用GORM内置Logger配置

GORM自带日志组件,调整Logger的级别和输出选项即可打印带参数的完整SQL:

import (
  "gorm.io/gorm"
  "gorm.io/gorm/logger"
  "log"
  "os"
  "time"
)

func main() {
  // 配置自定义Logger
  newLogger := logger.New(
    log.New(os.Stdout, "\r\n", log.LstdFlags),
    logger.Config{
      SlowThreshold:        time.Second,   // 慢SQL阈值,超过该时长的SQL会标记为慢查询
      LogLevel:             logger.Info,   // 日志级别设为Info,会记录所有SQL执行细节
      Colorful:             true,          // 启用彩色输出(可选)
      ParameterizedQueries: false,         // 设为false直接替换占位符为实际参数值,而非显示?
    },
  )

  // 初始化DB时传入Logger配置
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
    Logger: newLogger,
  })
}

执行db.Create(&user)时,会输出类似以下的完整SQL:

INSERT INTO `users` (`name`,`age`,`created_at`) VALUES ("jinzhu", 18, "2020-07-04 11:05:21.775")

2. 自定义Logger实现(按需选择)

如果需要更灵活的日志处理(比如输出到文件、日志系统),可以实现gorm.Logger接口自定义记录逻辑:

import (
  "context"
  "fmt"
  "gorm.io/gorm"
  "gorm.io/gorm/logger"
)

type CustomLogger struct{}

func (l CustomLogger) LogMode(level logger.LogLevel) logger.Interface {
  return l
}

func (l CustomLogger) Info(ctx context.Context, msg string, data ...interface{}) {
  // 自定义SQL日志格式,直接打印替换参数后的完整SQL
  fmt.Printf("[SQL] %s\n", fmt.Sprintf(msg, data...))
}

// 需实现Logger接口的其他方法:Warn、Error、Trace、SlowQuery

// 初始化DB时使用自定义Logger
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  Logger: CustomLogger{},
})

关键注意点

  • 必须将ParameterizedQueries设为false,否则日志只会显示带?的占位符SQL,不会替换为实际参数。
  • 日志级别需设为logger.Info或logger.Debug,才能捕获所有SQL执行日志。

内容的提问来源于stack exchange,提问作者Sushant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:05:26