moul / zapgorm2

⚡ zap logging driver for gorm v2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] 并非所有gorm调动到的logger都被zap接管了

Aaxom opened this issue · comments

commented

Describe the bug
gorm使用的github.com/go-sql-driver/mysql库中,使用的errLog没有被zap接管,依旧是使用log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile)创建的logger

To Reproduce

  1. 启动1个mysql,配置好gorm连接mysql,启动项目
  2. 退出mysql
  3. 通过请求gin或者其他方式调用gorm查询数据库
  4. 因为mysql退出了,查询肯定失败,但是报错是从github.com/go-sql-driver/mysql中的errLog输出错误日志的,没有由zap统一接管

Expected behavior
所有gorm相关日志统一由zap接管输出

Screenshots / Logs
控制台输出:[mysql] 2022/08/05 12:17:14 packets.go:123: closing bad idle connection: EOF

Versions (please complete the following information, if relevant):

  • Software version: v1.1.3
  • OS: Mac
  • Golang version 1.19

Additional context
可选适配方法:
zapgorm2.Logger结构体中添加github.com/go-sql-driver/mysql的Logger接口,并实现Print方法即可,实现可参考下面代码:

func (l Logger) Print(v ...interface{}) {
  if l.LogLevel < gormlogger.Error {
    return
  }
  l.logger().Sugar().Errorf(fmt.Sprint(v...))
  // 或者直接使用Logger中的Error函数
  // l.Error(context.Background(), fmt.Sprint(v...))
}