grom设置全局日志实现执行并打印sql语句

 更新时间:2025年03月02日 11:35:56   作者:code--cat  
本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些方法,可以更好地控制和记录数据库操作的日志信息

gorm中的自定义日志

Gorm 有一个 默认 logger 实现,默认情况下,它会打印慢 SQL 和错误

Logger 接受的选项不多,您可以在初始化时自定义它,例如:

newLogger := logger.New(
  log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  logger.Config{
    SlowThreshold:              time.Second,   // Slow SQL threshold(慢速SQL阈值)
    LogLevel:                   logger.info, // Log level(日志级别)
    IgnoreRecordNotFoundError: true,           // Ignore ErrRecordNotFound error for logger
    ParameterizedQueries:      true,           // Don't include params in the SQL log(忽略记录器的ErrRecordNotFound错误)
    Colorful:                  true,          // Disable color(禁用颜色)设置彩色打印
  },
)

// Globally mode
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  Logger: newLogger,
})

gorm中日志的其他操作

日志级别

GORM 定义了这些日志级别:Silent、Error、Warn、Info

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  Logger: logger.Default.LogMode(logger.Silent),
})

Debug

Debug 单个操作,将当前操作的 log 级别调整为 logger.Info

db.Debug().Where("name = ?", "jinzhu").First(&User{})

自定义 Logger

参考 GORM 的 默认 logger 来定义您自己的 logger

Logger 需要实现以下接口,它接受 context,所以你可以用它来追踪日志

type Interface interface {
    LogMode(LogLevel) Interface
    Info(context.Context, string, ...interface{})
    Warn(context.Context, string, ...interface{})
    Error(context.Context, string, ...interface{})
    Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error)
}

详细内容可参考gorm官方文档:https://gorm.io/zh_CN/docs/logger.html

到此这篇关于grom设置全局日志实现执行并打印sql语句的文章就介绍到这了,更多相关grom设置全局日志 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文详解下划线字段在golang结构体中的应用

    一文详解下划线字段在golang结构体中的应用

    这篇文章主要为大家详细介绍了下划线字段在golang结构体中应用的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-08-08
  • Go语言sync.Pool对象池使用场景基本示例

    Go语言sync.Pool对象池使用场景基本示例

    这篇文章主要为大家介绍了Go语言sync.Pool对象池使用场景的基本示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 关于Golang中for-loop与goroutine的问题详解

    关于Golang中for-loop与goroutine的问题详解

    这篇文章主要给大家介绍了关于Golang中for-loop与goroutine问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用golang具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Golang并发读取文件数据并写入数据库的项目实践

    Golang并发读取文件数据并写入数据库的项目实践

    本文主要介绍了Golang并发读取文件数据并写入数据库的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Go基础教程系列之import导入包(远程包)和变量初始化详解

    Go基础教程系列之import导入包(远程包)和变量初始化详解

    这篇文章主要介绍了Go基础教程系列之import导包和初始化详解,需要的朋友可以参考下
    2022-04-04
  • GO语言常用的文件读取方式

    GO语言常用的文件读取方式

    这篇文章主要介绍了GO语言常用的文件读取方式,涉及一次性读取、分块读取与逐行读取等方法,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • go语言使用RC4加密的方法

    go语言使用RC4加密的方法

    这篇文章主要介绍了go语言使用RC4加密的方法,实例分析了RC4加密的技巧与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • golang语法使用的注意事项

    golang语法使用的注意事项

    这篇文章主要给大家介绍了关于golang语法使用的一些注意事项,Golang是一种静态类型的编程语言,它支持基本的数据类型,包括整型、浮点型、布尔型、字符串型,需要的朋友可以参考下
    2023-07-07
  • Gin框架自带参数校验的使用详解

    Gin框架自带参数校验的使用详解

    这篇文章主要为大家详细介绍了如何使用Gin框架自带的参数校验,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • 详解如何使用go-acme/lego实现自动签发证书

    详解如何使用go-acme/lego实现自动签发证书

    这篇文章主要为大家详细介绍了如何使用 go-acme/lego 的客户端或库完成证书的自动签发,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03

最新评论