教程 > gorm 教程 > 阅读:131

gorm logger——迹忆客-ag捕鱼王app官网

gorm 有一个 默认 logger 实现,默认情况下,它会打印慢 sql 和错误。

logger 接受的选项不多,我们可以在初始化时自定义它。

newlogger := logger.new(
  log.new(os.stdout, "\r\n", log.lstdflags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
  logger.config{
    slowthreshold: time.second,   // 慢 sql 阈值
    loglevel:      logger.silent, // 日志级别
    ignorerecordnotfounderror: true,   // 忽略errrecordnotfound(记录未找到)错误
    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 定义了这些日志级别:silenterrorwarninfo

db, err := gorm.open(sqlite.open("test.db"), &gorm.config{
  logger: logger.default.logmode(logger.silent),
})

debug

debug 单个操作,将当前操作的 log 级别调整为 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)
}

查看笔记

扫码一下
查看教程更方便
网站地图