首页 > 数据库 >Gorm - 链式执行输出执行的SQL【gorm io版本】

Gorm - 链式执行输出执行的SQL【gorm io版本】

时间:2023-06-04 10:45:13浏览次数:32  
标签:db gorm io SQL 日志 logger

在GROM使用链式操作过程中,我们想要知道最终执行的SQL是什么,本文讲解三种常见的SQL日志打印方法。

一、全局打印所有的SQL

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

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

  

三、慢查询日志

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,
})

 

标签:db,gorm,io,SQL,日志,logger
From: https://www.cnblogs.com/beatle-go/p/17455298.html

相关文章

  • 标准化(Standardization)、归一化(Normalization)
    归一化:1)把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为......
  • python——pandas数据分析(表格处理)工具实现Apriori算法
    pandas是基于NumPy的一种工具,名字很卡哇伊,来源是由“Paneldata”(面板数据,一个计量经济学名词)两个单词拼成的。pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。主要应用于处理大型数据集。数据处理速度算是最大的特色,剩下的就是个python版的exc......
  • MySQL主从复制
    MySQL主从复制一、复制概述将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。二、复制原理My......
  • 06web安全学习---信息搜集(The Soul of penetration test)
    声明学习网络安全,必须要坚守一个原则,那就是一定一定一定要遵守《中华人民共和国网络安全法》,做一个遵纪守法的好公民,不要利用技术做一些违法犯罪的事情,否则后果自负,请切记!!!一、为什么要信息收集(踩点)目的就是找到薄弱点进行attack;二、信息收集方向三、巧用网络空间搜索引擎 四、信息......
  • PXE(Preboot eXecution Environment)是一种通过网络引导计算机的协议,可以在没有本地存储
    PXE(PrebooteXecutionEnvironment)是一种通过网络引导计算机的协议,可以在没有本地存储设备或可启动介质的情况下从网络上加载操作系统和应用程序。PXE版本因厂商或标准制定者的不同而有所不同。以下是常见的PXE版本及其大致年代:PXE1.0:最早的PXE版本,于1999年左右推出。PXE2......
  • HTTP Boot(即基于HTTP的引导)是一种网络引导协议,它使用HTTP作为文件传输协议,支持远程引
    HTTPBoot(即基于HTTP的引导)是一种网络引导协议,它使用HTTP作为文件传输协议,支持远程引导、安装和部署操作系统和应用程序。与传统的PXE(PrebooteXecutionEnvironment)方式相比,HTTPBoot具有更高的灵活性、可扩展性和安全性。HTTPBoot可以通过以下步骤实现:启动计算机后,BIOS会向......
  • w task 2 - discussion essay
    Discussboththeseviews introductionAorB?Benefitsofboth,but....moreimportant.peoplehavedifferentviewsthatasenseofA.While...issometimesusefulinlife,ibelievethatBisbetter.WhyAisencouraged WhyBisbetter(Ithink) c......
  • MySQL 8错误日志出现"The table /home/work/mysql_3306/tmp/#sqla2b_298b06_4d is fu
    ##############    了解MySQL8.0.26的错误日志出现"Thetable /home/work/mysql_3306/tmp/#sqla2b_298b06_4disfu11!"的bug,暂时通过修改临时表的存储引擎为内存引擎解决  MySQL8.0.13开始引入新的临时内存表引擎TempTable,并将其作为内存中创建临时表的默认存储引擎。T......
  • Cloud Native Computing Foundation
    CloudNativeComputingFoundation1)DevOpsDevOps(Development和Operations的组合词)即开发、运维一体化。涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。最佳实践:Git,Jenkins,Bamboo,Docker,Kubernetes2)持续交付持续交付:持续交付是不误时开发,不停机更新......
  • Map 接收 @RequestBody,Controller 层可以打印值,但是 mybatis 编译 SQL 语句显示 NULL
    mybatis#{}获取的key是否一致;前端发送请求类型是否与后端接口定义的请求类型一致;前端发送请求与接口请求的类型一致的情况下,检查post请求封装data时是否以get形式传递数据。我的问题是第三个,尤其是后端不报任何错误的情况下,第三种情况极有可能。我把axios.post......