[BUG] 并非所有gorm调动到的logger都被zap接管了
Aaxom opened this issue · comments
Aaron 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个mysql,配置好gorm连接mysql,启动项目
- 退出mysql
- 通过请求gin或者其他方式调用gorm查询数据库
- 因为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...))
}