Gorm 日志的使用

gorm默认打印的是错误和慢sql,可以自定义显示日志的等级。

全局 在gorm.config去添加

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

type Student struct {
	ID          uint
	StudentName string
	Age         int
}

var DB *gorm.DB

func init() {
	dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local&timeout=10s"
	var mysqlLogger logger.Interface
	mysqlLogger = logger.Default.LogMode(logger.Info)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "f_",  //表名前缀,都加上f_
			SingularTable: true,  //单数表名
			NoLowerCase:   false, //不要小写转换
		},
		SkipDefaultTransaction: true,
		Logger:                 mysqlLogger,
	})

	if err != nil {
		panic("数据库连接失败,err=" + err.Error())
	}
	//连接成功
	DB = db
}

func main() {
	DB.AutoMigrate(&Student{})
}

第二种写日志的功能 创建session 在session里面去添加

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

type Student struct {
	ID          uint
	StudentName string
	Age         int
}

var DB *gorm.DB
var mysqlLogger logger.Interface

func init() {
	dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local&timeout=10s"

	mysqlLogger = logger.Default.LogMode(logger.Info)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "f_",  //表名前缀,都加上f_
			SingularTable: true,  //单数表名
			NoLowerCase:   false, //不要小写转换
		},
		SkipDefaultTransaction: true,
	})

	if err != nil {
		panic("数据库连接失败,err=" + err.Error())
	}
	//连接成功
	DB = db
}

func main() {
	DB := DB.Session(&gorm.Session{
		Logger: mysqlLogger,
	})
	DB.AutoMigrate(&Student{})
}

第三种 debug

func main() {
	DB.Debug().AutoMigrate(&Student{})
}
GORM中,可以通过设置日志级别来开启调试模式。可以在初始化GORM时设置Debug(true)来启用调试模式,如下所示: ```go import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) dsn := "username:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } // 开启调试模式 db = db.Debug() // 执行查询 db.First(&user) ``` 在执行查询操作时,会输出完整的SQL语句和参数,方便调试。 另外,可以使用gorm.io/gorm/logger包中的Logger接口,自定义日志输出方式和级别。例如,可以使用logrus库来输出日志: ```go import ( "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/logger" "github.com/sirupsen/logrus" ) dsn := "username:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: &logrusLogger{}, }) if err != nil { panic(err) } // 定义logrusLogger type logrusLogger struct{} func (l *logrusLogger) LogMode(level logger.LogLevel) logger.Interface { return l } func (l *logrusLogger) Info(ctx context.Context, msg string, data ...interface{}) { logrus.WithContext(ctx).WithFields(logrus.Fields{ "data": data, }).Info(msg) } func (l *logrusLogger) Warn(ctx context.Context, msg string, data ...interface{}) { logrus.WithContext(ctx).WithFields(logrus.Fields{ "data": data, }).Warn(msg) } func (l *logrusLogger) Error(ctx context.Context, msg string, data ...interface{}) { logrus.WithContext(ctx).WithFields(logrus.Fields{ "data": data, }).Error(msg) } func (l *logrusLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) { logrus.WithContext(ctx).WithFields(logrus.Fields{ "elapsed": time.Since(begin), "sql": fc(), "error": err, }).Trace("SQL query") } ``` 在LogrusLogger中,定义了四个方法,分别对应不同的日志级别。在执行查询操作时,会使用LogrusLogger输出日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值