我希望在gorm执行某些sql语句时,如果发生异常,则将执行的SQL打印到日志中
我的代码如下示例
result := db.Find(®ionModels)
if err := result.Error; err != nil {
log.Error(
"Find err",
zap.String("sql", result.Statement.SQL.String()),
zap.Error(err),
)
}
我通过阅读gorm的源码得知,当执行Find时,result.Statement.SQL会调用Reset方法清空内部的SQL语句。
因而,我得到的日志里不能正确的打印出SQL
The document you expected this should be explained
Expected answer
GORM是否提供了某函数可以返回build出的sql?
Comment From: ivila
你用的是哪个版本的gorm?这个一直都是有的,你看看自定义Logger那里,https://gorm.io/docs/logger.html 注意看那个Trace方法,你可以搞个自定义的Logger(内部使用zap来打日志),然后实现Trace方法的时候,在err时打印出来。 具体样例可以参照gorm的默认Logger实现:https://github.com/go-gorm/gorm/blob/master/logger/logger.go @VarusHsu
Comment From: VarusHsu
你用的是哪个版本的gorm?这个一直都是有的,你看看自定义Logger那里,https://gorm.io/docs/logger.html 注意看那个Trace方法,你可以搞个自定义的Logger(内部使用zap来打日志),然后实现Trace方法的时候,在err时打印出来。 具体样例可以参照gorm的默认Logger实现:https://github.com/go-gorm/gorm/blob/master/logger/logger.go @VarusHsu
Your solution good for me. Thanks @ivila