当前位置: 首页 > news >正文

如何屏蔽GORM个别sql的日志

背景:

gorm开启了日志,有个表存储大的二进制数据,导致日志文件很大,而且二进制导致乱码。

需求:

屏蔽这个表的sql日志,不要影响其他表的sql日志。

实验:

gorm_log.go

package mainimport ("database/sql""fmt""log""net/url""gorm.io/gorm/logger""time""gorm.io/driver/mysql""gorm.io/gorm"
)type Params struct {Id    int64  `gorm:"id" json:"id"`Key   string `gorm:"key" json:"key"`Value string `gorm:"value" json:"value"`
}func (Params) TableName() string {return "params"
}func main() {encodedPassword := url.QueryEscape("mypass")dsn := "root:" + encodedPassword + "@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"//fmt.Println(dsn)newLogger := logger.New(log.New(log.Writer(), "\r\n", log.LstdFlags), // io writerlogger.Config{SlowThreshold:             time.Second, // 慢SQL阈值LogLevel:                  logger.Info, // 日志级别IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound(记录未找到)错误Colorful:                  true,        // 启用彩色打印},)gormDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger,})sqlDB, err := gormDB.DB()if err != nil {log.Fatal(err)}// 常规的gorm用法var params ParamssqlResult := gormDB.First(&params, 1)if sqlResult.Error != nil {log.Fatal(sqlResult.Error)}fmt.Println(params)// gorm使用原生SQL查询var result struct {Count int}err = sqlDB.QueryRow("SELECT COUNT(*) as count FROM params").Scan(&result.Count)if err != nil {log.Fatal(err)}fmt.Printf("count: %d\n", result.Count)// 使用真正的原生SQL(不依赖GORM)useNativeSQL(sqlDB)
}func useNativeSQL(db *sql.DB) {rows, err := db.Query("SELECT `key`, value FROM params limit 3")if err != nil {log.Fatal(err)}defer rows.Close()for rows.Next() {var key, value stringerr = rows.Scan(&key, &value)if err != nil {log.Fatal(err)}fmt.Printf("key: %s, value: %s\n", key, value)}if err = rows.Err(); err != nil {log.Fatal(err)}
}

运行:

go mod init gormtest
go mod tidy
go run gorm_log.go

输出:

结论:

1、gorm常规用法会有日志。

2、通过gorm执行原生sql不会有日志。

3、从gorm获取数据库连接,然后使用golang的原生sql写法不会有日志。

--end--

http://www.dtcms.com/a/516272.html

相关文章:

  • [C++]软件接口函数测试
  • 基于 Apache POI 5.2.5 构建高效 Excel 工具类:从零到生产级实践
  • 直接插入排序详解
  • 网站界面切片做程序宁波免费建站seo排名
  • Leetcode 33
  • 济南制作网站制作公司策划采购网有哪些平台
  • conda 换盘符
  • 统一身份认证、权限管理系统设计
  • 福州整站优化网站在线设计
  • 网站如何加入百度网盟重庆市住房和城乡建设厅官方网站
  • 批量删除多个 PDF 文件顶部和底部的文字说明
  • 专题:2025年制造业数智化发展白皮书:数字化转型与智能制造|附130+份报告PDF、数据、绘图模板汇总下载
  • Ubuntu 25.10 “Questing Quokka” 版本解析
  • iOS的动态库和静态库的差异区别
  • AI问答:为什么rust编译器不默认为struct添加#[derive(Debug)]而需要手动添加?
  • 如何正确选择住宅IP?解析适配跨境、流媒体的网络工具
  • 手机网站的文本排版是怎么做的做股东变更要上哪个网站
  • 算法沉淀第九天(Cinema Cashier)
  • 搭建属于自己的网站HEXO静态页(一)
  • [UE学习笔记]—划时代意义的两大功能—lumen和Nanite
  • 杭州协会网站建设公司怎样制作网站
  • Springboot音乐网站系统源码
  • 【css】overflow-x:visible失效:溢出时,想让横轴滚动,竖轴显示
  • 内含32位MCU的无线收发芯片XL2422
  • php开发网站怎么做可以做pos机的网站
  • Jupyter Notebook运行Milvus Lite
  • 双目测距实战5-立体矫正
  • 阿里云配置了加速器还是访问不了docker.io的解决方案。
  • 四川星星建设集团有限公司网站天津建设工程信息王
  • 网站创建人是网站下做二级域名