教程

日志

qianmoQqianmoQ· 更新于 2026-09-23· 阅读 4 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Logger

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

Logger 接受几个选项,你可以在初始化时自定义它,例如:

newLogger := logger.New(
  log.New(os.Stdout, "\r\n", log.LstdFlags), 
  logger.Config{
    SlowThreshold:              time.Second,   
    LogLevel:                   logger.Silent, 
    IgnoreRecordNotFoundError: true,           
    ParameterizedQueries:      true,           
    Colorful:                  false,          
  },
)


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


tx := db.Session(&Session{Logger: newLogger})
tx.First(&user)
tx.Model(&user).Update("Age", 18)

日志级别

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

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

调试

调试单个操作,将当前操作的日志级别更改为 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)
}

GitHub tag (latest SemVer)

评论

登录后参与评论

正在加载评论…