gorm进阶操作之日志 | 青训营

705 阅读2分钟

gorm的日志设置

gorm的日志默认是只打印错误和慢sql,但我们可以对代码进行一定的操作来使日志也能打印其他的一些操作。

第一种方法
mysqlLogger := logger.Default.LogMode(logger.Info)

db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{  
    Logger: mysqlLogger,  
})

其中mysqlLogger的类型为logger.Interface

在执行了以上操作后,当我们对数据库进行操作后便会显示日志了,例如在执行了代码db.Create(&Product{Code: "D42", Price: 100})后就会显示 INSERT INTO products (created_at,updated_at,deleted_at ,code,price) VALUES ('2023-08-26 21:22:48.539','2023-08-26 21:22:48.539',NU LL,'D42',100),可以看到日志就被打印出来了。而第一种方法会对所有的操作都打印日志,但有时我们可能并不需要将所有的日志都打印出来。这时就可以利用另外一种方法来打印日志。

第二种方法
mysqlLogger := logger.Default.LogMode(logger.Info)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{  
//Logger: mysqlLogger,  
})

DB := db  
`  `
DB = DB.Session(&gorm.Session{  
Logger: mysqlLogger,  
})

db.AutoMigrate(&Product{})

DB.Create(&Product{Code: "D42", Price: 100})

第二种方法一开始和第一种方式一样也要先定义一个logger.Inerface类型,但为了能单独显示日志,我们不要将Logger:mysqlLogger添加到原来的位置,而是先定义一个db类型的变量,之后再利用Session函数添加Logger:mysqlLogger随后我们便可以对需要显示日志的操作改为使用DB以此达到对于特定操作显示日志的效果。

简便方法

可以看到以上方法都要对代码添加不少内容,但有一种方法,不仅可以对于特定的操作显示日志,还特别的简短那就是db.Debug().Create(&Product{Code: "D42", Price: 100}),可以看到相对于之前的代码这里添加了Debug(),而加入了这个后就是单独的对这个操作显示日志。