代码拉取完成,页面将自动刷新
package fgin
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
glogger "gorm.io/gorm/logger"
)
var fdbMap = make(map[string]*gorm.DB)
func initGorm() {
if len(fginConfig.Mysql) == 0 {
// 没有填写mysql配置则不进行初始化
return
}
var newGormLog glogger.Interface
if fginConfig.GormLog != (GormLog{}) {
// 配置文件如果没有gorm log的配置,则配置为空
newGormLog = initGormLog()
}
for _, v := range fginConfig.Mysql {
dsn := v.Target
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newGormLog,
})
if err != nil {
panic("mysql初始化失败: " + err.Error())
}
if v.MaxIdle > 0 && v.MaxOpen > 0 && v.MaxLift > 0 {
// 构建连接池
// 获取通用数据库对象 sql.DB ,然后使用其提供的功能
sqlDB, err := db.DB()
if err != nil {
panic("mysql连接池失败: " + err.Error())
}
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
sqlDB.SetMaxIdleConns(v.MaxIdle)
// SetMaxOpenConns 设置打开数据库连接的最大数量。
sqlDB.SetMaxOpenConns(v.MaxOpen)
// SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Millisecond * time.Duration(v.MaxLift))
}
fdbMap[v.Name] = db
}
}
func initGormLog() glogger.Interface {
// 初始化gorm的日志输出
return glogger.New(
&fginGormLog{},
// log.New(os.Stdout, "\r\n", log.LstdFlags),
glogger.Config{
SlowThreshold: time.Duration(fginConfig.GormLog.SlowThreshold) * time.Millisecond,
LogLevel: glogger.LogLevel(fginConfig.GormLog.LogLevel),
IgnoreRecordNotFoundError: fginConfig.GormLog.IgnoreRecordNotFoundError,
ParameterizedQueries: fginConfig.GormLog.ParameterizedQueries,
Colorful: fginConfig.GormLog.Colorful,
},
)
}
type fginGormLog struct{}
func (fgLog *fginGormLog) Printf(msg string, data ...any) {
sqlStr := fmt.Sprintf(msg, data...)
if fginConfig.GormLog.LogLevel <= 2 {
logSuger.Error(sqlStr)
} else if fginConfig.GormLog.LogLevel == 3 {
logSuger.Warn(sqlStr)
} else if fginConfig.GormLog.LogLevel == 4 {
logSuger.Info(sqlStr)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。