【GORM】GORM链式执行输出执行的SQL

【GORM】GORM链式执行输出执行的SQL,第1张

文章目录 前言一、全局打印所有的SQL二、打印单条SQL三、慢查询日志

前言

在上篇文章GORM jinzhu版本和io版本连接MySQL数据库问题中我们讲解了两个版本的GORM数据库连接问题,在GROM使用链式 *** 作过程中,我们想要知道最终执行的SQL是什么,本文讲解三种常见的SQL日志打印方法。

一、全局打印所有的SQL

gorm.io版本中,我们可以在建立连接时指定打印info级别的sql。
注意gorm版本的io版本

import (
	"time"
	
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

dsn := "root:5120154230@(localhost)/tonghua?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ //建立连接时指定打印info级别的sql
	Logger: logger.Default.LogMode(logger.Info), //配置日志级别,打印出所有的sql
})
if err != nil {
	panic(err)
}
defer func() {
	sqlDB, err1 := db.DB() //连接池
	if err1 != nil {
		panic(err1)
	}
	// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
	sqlDB.SetMaxIdleConns(10)

	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)
	
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)
	sqlDB.Close()
}()
二、打印单条SQL

单条SQL的打印比较简单,只需要在 *** 作前加Debug()方法, 则相当于将临时将日志级别改为Info。

db.Table("animal").Debug().Select([]string{"name", "age"}).Find(&animals)
// select name,age from animal
db.Table("animal").Debug().Select("count(distinct(name))").Count(&cnt)
// select count(distinct(name)) from animal
三、慢查询日志

该版本使用的依然是gorm.io版本,定义慢查询日志的Logger,添加在连接中即可。

import (
	"log"
	"os"
	"time"
	
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

slowLogger := logger.New(
	//将标准输出作为Writer
	log.New(os.Stdout, "\r\n", log.LstdFlags),
	logger.Config{
		//设定慢查询时间阈值为1ms
		SlowThreshold: 1 * time.Microsecond,
		//设置日志级别,只有Warn和Info级别会输出慢查询日志
		LogLevel: logger.Warn,
	},
)
dsn := "root:5120154230@(localhost)/tonghua?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
	Logger: slowLogger,
})

在源码中,我们发现默认的慢查询阈值SlowThreshold=200ms,如果不想改变该值,只需要将日志级别设置为Warn也可直接打印出慢查询日志。

db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
    Logger:logger.Default.LogMode(logger.Warn),
})

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/990056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存