golang gorm 访问底层 mysql 查询
golang gorm Access the underlying mysql query
有没有办法从 https://github.com/jinzhu/gorm 获取 sql 查询日志?
例如在开发环境中,能够将已调用的 mysql 查询记录到控制台会很有用。
例如如何获取以下查询的基础 sql 查询日志:
gorm.Find(&todos)
gorm.Preload("User").Find(&todos)
我知道我可以打电话给:
gorm.Debug().Find(&todos)
gorm.Debug().Preload("User").Find(&todos)
但如果在开发环境中而不是在生产环境中,我只想调用 Debug()
您可以使用 gorm.SetLogger 方法将您自己的记录器传递给 gorm。它使用记录器的 Print 方法打印日志以及 SQL 查询。任何记录器(logrus/go 的内置记录器)的 Print 方法的日志级别通常设置为 INFO。在将记录器传递给 gorm 时,如果将日志级别设置为低于或等于 INFO(DEBUG/INFO) 的任何值,您可以看到 sql 查询和 gorm
的其他日志
您还可以从配置文件中解析日志级别,您可以根据环境进行设置
这样做就可以了:
db, err:= Open(dbType, connectionDSN);
db.LogMode(true)
在新版本(GORM v2)中,使用Logger
接口:
import "gorm.io/gorm/logger"
db, err := gorm.Open(mysql.Open(connectionDSN), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
对于旧版本 (GORM v1):
db, err:= Open(dbType, connectionDSN);
db.LogMode(true)
注意:这并非特定于 MySQL,并且可以与任何其他数据库驱动程序(例如 Postgres、SQLite 等)一起使用。
有没有办法从 https://github.com/jinzhu/gorm 获取 sql 查询日志?
例如在开发环境中,能够将已调用的 mysql 查询记录到控制台会很有用。
例如如何获取以下查询的基础 sql 查询日志:
gorm.Find(&todos)
gorm.Preload("User").Find(&todos)
我知道我可以打电话给:
gorm.Debug().Find(&todos)
gorm.Debug().Preload("User").Find(&todos)
但如果在开发环境中而不是在生产环境中,我只想调用 Debug()
您可以使用 gorm.SetLogger 方法将您自己的记录器传递给 gorm。它使用记录器的 Print 方法打印日志以及 SQL 查询。任何记录器(logrus/go 的内置记录器)的 Print 方法的日志级别通常设置为 INFO。在将记录器传递给 gorm 时,如果将日志级别设置为低于或等于 INFO(DEBUG/INFO) 的任何值,您可以看到 sql 查询和 gorm
的其他日志您还可以从配置文件中解析日志级别,您可以根据环境进行设置
这样做就可以了:
db, err:= Open(dbType, connectionDSN);
db.LogMode(true)
在新版本(GORM v2)中,使用Logger
接口:
import "gorm.io/gorm/logger"
db, err := gorm.Open(mysql.Open(connectionDSN), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
对于旧版本 (GORM v1):
db, err:= Open(dbType, connectionDSN);
db.LogMode(true)
注意:这并非特定于 MySQL,并且可以与任何其他数据库驱动程序(例如 Postgres、SQLite 等)一起使用。