> 文章列表 > gorm sql日志

gorm sql日志

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 配置中即可。