// Package define ... // // Description : define ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2024-08-20 17:36 package define import ( "context" "git.zhangdeman.cn/zhangdeman/logger/wrapper" "go.uber.org/zap" "gorm.io/gorm" gormLogger "gorm.io/gorm/logger" ) // DBClient 包装日志实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:09 PM 2021/12/24 type DBClient struct { DbFlag string // 数据库标识 LoggerInstance *zap.Logger // 日志实例 master *gorm.DB // 主库 slave *gorm.DB // 从库 ExtraFieldList []string // 提取的字段 Cfg Driver // 数据库配置 } // SetFlag 设置数据库标识 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:18 2022/6/5 func (dc *DBClient) SetFlag(dbFlag string) { dc.dbFlag = dbFlag } // GetMaster 获取主库连接 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:28 PM 2021/12/24 func (dc *DBClient) GetMaster(ctx context.Context) *gorm.DB { session := dc.master.Session(&gorm.Session{}) session.Logger = dc.getLogger(ctx, session, "master") return session } // GetSlave 获取从库链接 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:29 PM 2021/12/24 func (dc *DBClient) GetSlave(ctx context.Context) *gorm.DB { session := dc.slave.Session(&gorm.Session{}) session.Logger = dc.getLogger(ctx, session, "slave") return session } // getLogger 获取日志实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:45 PM 2021/12/24 func (dc *DBClient) getLogger(ctx context.Context, dbClient *gorm.DB, node string) gormLogger.Interface { return wrapper.NewGormLoggerWithInstance(ctx, dbClient, dc.loggerInstance, dc.dbFlag+"|"+node, dc.extraFieldList) }