如何查看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
相关产品推荐
相关产品推荐

