gorm sql日志
什么是.gorm sql日志
「.gorm sql日志」是针对 Golang 中使用 GORM 的 ORM 框架,用于记录应用程序和数据库之间所有 SQL 语句和执行时间的一个工具。
为什么需要.gorm sql日志
在开发过程中,我们可能需要调试或者优化 SQL 语句。.gorm sql日志提供了方便的方式来追踪应用程序与数据库之间的交互,可以解决以下问题:
- 追踪应用程序执行的 SQL 语句
- 测量 SQL 执行时间,以便优化慢 SQL 语句
- 了解数据库中数据发生的变化
如何启用.gorm sql日志
使用.gorm sql日志非常简单。只需在引入 gorm 包后,在 GORM 初始化时,打开日志记录功能即可。以下是示例代码:
import ( "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger")func main() { dsn := "root:password@tcp(127.0.0.1:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }) if err != nil { panic(err) }}
通过设置 Logger 的 LogMode 为 logger.Info,即可启用.gorm sql日志记录功能。设置完 LogMode 后,GORM 会将 SQL 语句和执行时间记录在标准错误流中,即在控制台中输出。
.gorm sql日志的格式
.gorm sql日志的格式如下:
[时间戳] [Level] [来源] [详情][/repo/gorm/logger_test.go:22] [INFO] [gorm] [rows:18.700ms] SELECT * FROM `users` WHERE `users`.`id` = 1 AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1
时间戳可以帮助我们快速了解 SQL 语句的执行时间。Level 则是用来表示日志的等级,包括 panic、fatal、error、warn、info、debug 和 trace。来源为 gorm,详情则是执行的 SQL 语句及执行时间。日志中还会有其他信息,例如 SQL 执行所涉及到的的行数。
如何自定义.gorm sql日志格式
如果默认的.gorm sql日志格式无法满足需求,我们可以通过自定义 logger 来实现。以下是示例代码:
type CustomLogger struct {}func (l *CustomLogger) LogMode(level logger.LogLevel) logger.Interface { return l}func (l *CustomLogger) Info(ctx context.Context, s string, i ...interface{}) { // 自定义输出日志格式 log.Printf("【Info】%v %v\n", time.Now().Format("2006-01-02 15:04:05"), s)}func main() { dsn := "root:password@tcp(127.0.0.1:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: &CustomLogger{}, }) if err != nil { panic(err) }}
在 CustomLogger 中,我们可以自定义 logger 所输出的信息。这里输出了当前的时间戳和日志内容,可以根据需求,自定义输出日志格式。最后将 CustomLogger 实例传入 GORM 初始化时的 Logger 配置中即可。