gorm.io/gorm/logger
和 github.com/jinzhu/gorm
的 logger 主要有以下区别:
1. 版本区别
-
github.com/jinzhu/gorm
是 GORM v1(旧版) -
gorm.io/gorm
是 GORM v2(新版)
2. Logger 接口变化
GORM v1 (github.com/jinzhu/gorm
)
-
使用
gorm.Logger
接口,较简单:go
复制
下载
type Logger interface { Print(v ...interface{}) }
-
示例:
go
复制
下载
db.LogMode(true) db.SetLogger(log.New(os.Stdout, "\r\n", 0))
GORM v2 (gorm.io/gorm
)
-
使用更复杂的
logger.Interface
:go
复制
下载
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() (string, int64), err error) }
-
支持 日志级别(
Info
,Warn
,Error
) -
支持 慢查询日志(
SlowThreshold
) -
支持 上下文(Context)
-
示例:
go
复制
下载
newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: time.Second, LogLevel: logger.Info, Colorful: true, }, ) db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{ Logger: newLogger, })
3. 主要改进(GORM v2)
特性 | GORM v1 (github.com/jinzhu/gorm ) | GORM v2 (gorm.io/gorm ) |
---|---|---|
日志级别 | ❌ 不支持 | ✅ Info , Warn , Error |
慢查询日志 | ❌ 手动实现 | ✅ SlowThreshold |
上下文支持 | ❌ 不支持 | ✅ 支持 context.Context |
彩色输出 | ❌ 不支持 | ✅ 支持 |
结构化日志 | ❌ 简单 Print | ✅ 更详细的 Trace 方法 |
4. 迁移建议
-
新项目建议使用
gorm.io/gorm
(v2),功能更强大,维护更好。 -
旧项目迁移:
-
如果只是简单日志,可以继续用
SetLogger
。 -
如果需要高级功能(如慢查询、上下文),建议升级到 v2。
-
5. 示例对比
GORM v1(旧版)
go
复制
下载
import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "log" "os" ) func main() { db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local") if err != nil { panic(err) } defer db.Close() // 启用日志 db.LogMode(true) db.SetLogger(log.New(os.Stdout, "\r\n", 0)) // 查询示例 var users []User db.Find(&users) // SQL 会打印到 stdout }
GORM v2(新版)
go
复制
下载
import ( "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/driver/mysql" "log" "os" "time" ) func main() { newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: time.Second, LogLevel: logger.Info, Colorful: true, }, ) db, err := gorm.Open(mysql.Open("user:password@/dbname?charset=utf8&parseTime=True&loc=Local"), &gorm.Config{ Logger: newLogger, }) if err != nil { panic(err) } // 查询示例 var users []User db.Find(&users) // SQL 会按日志级别打印 }
总结
-
github.com/jinzhu/gorm
(v1):简单,但功能有限。 -
gorm.io/gorm
(v2):更强大,支持日志级别、慢查询、上下文等。
如果你的项目还在用 v1,建议升级到 v2,以获得更好的日志控制和功能支持。