38

有没有办法从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()在开发环境中而不是在生产环境中调用

4

3 回答 3

57

这可以解决问题:

db, err:= Open(dbType, connectionDSN);
db.LogMode(true)
于 2016-03-29T11:39:50.040 回答
8

在新版本(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 的,它可以与任何其他 DB 驱动程序(例如 Postgres、SQLite 等)一起使用。

于 2021-02-25T11:52:28.010 回答
1

您可以使用 gorm.SetLogger 方法将自己的记录器传递给 gorm。它使用记录器的 Print 方法来打印日志以及 SQL 查询。任何 logger(logrus/go 的内置 logger)的 Print 方法的日志级别通常设置为 INFO。在将记录器传递给 gorm 时,如果将日志级别设置为低于或等于 INFO(DEBUG/INFO) 的任何值,则可以通过 gorm 查看 sql 查询和其他日志

您还可以从配置文件中解析日志级别,您可以在其中根据环境进行设置

于 2016-03-29T10:22:04.477 回答