Skip to content

Commit 23952c5

Browse files
SliverHornSliverHorn
andauthored
Update: (#1758)
1.config gorm相关移除DBBASE实现改为GeneralDB实现LogLevel函数 2.移除initializel/internal/logger实现,改为gorm_logger_writer实现gorm的logger通过zap输出到文件或者控制台 3.优化initializel/internal/gorm代码 Co-authored-by: SliverHorn <[email protected]>
1 parent 02fc503 commit 23952c5

File tree

9 files changed

+85
-119
lines changed

9 files changed

+85
-119
lines changed

server/config/db_list.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package config
22

3+
import (
4+
"gorm.io/gorm/logger"
5+
"strings"
6+
)
7+
38
type DsnProvider interface {
49
Dsn() string
510
}
@@ -16,14 +21,29 @@ type GeneralDB struct {
1621
Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库密码
1722
Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码
1823
Path string `mapstructure:"path" json:"path" yaml:"path"`
19-
Engine string `mapstructure:"engine" json:"engine" yaml:"engine" default:"InnoDB"` //数据库引擎,默认InnoDB
24+
Engine string `mapstructure:"engine" json:"engine" yaml:"engine" default:"InnoDB"` // 数据库引擎,默认InnoDB
2025
LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志
2126
MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数
2227
MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数
23-
Singular bool `mapstructure:"singular" json:"singular" yaml:"singular"` //是否开启全局禁用复数,true表示开启
28+
Singular bool `mapstructure:"singular" json:"singular" yaml:"singular"` // 是否开启全局禁用复数,true表示开启
2429
LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件
2530
}
2631

32+
func (c GeneralDB) LogLevel() logger.LogLevel {
33+
switch strings.ToLower(c.LogMode) {
34+
case "silent", "Silent":
35+
return logger.Silent
36+
case "error", "Error":
37+
return logger.Error
38+
case "warn", "Warn":
39+
return logger.Warn
40+
case "info", "Info":
41+
return logger.Info
42+
default:
43+
return logger.Info
44+
}
45+
}
46+
2747
type SpecializedDB struct {
2848
Type string `mapstructure:"type" json:"type" yaml:"type"`
2949
AliasName string `mapstructure:"alias-name" json:"alias-name" yaml:"alias-name"`

server/config/gorm_mssql.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package config
33
type Mssql struct {
44
GeneralDB `yaml:",inline" mapstructure:",squash"`
55
}
6-
//dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
6+
7+
// Dsn "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm"
78
func (m *Mssql) Dsn() string {
89
return "sqlserver://" + m.Username + ":" + m.Password + "@" + m.Path + ":" + m.Port + "?database=" + m.Dbname + "&encrypt=disable"
910
}
10-
11-
func (m *Mssql) GetLogMode() string {
12-
return m.LogMode
13-
}

server/config/gorm_mysql.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,3 @@ type Mysql struct {
77
func (m *Mysql) Dsn() string {
88
return m.Username + ":" + m.Password + "@tcp(" + m.Path + ":" + m.Port + ")/" + m.Dbname + "?" + m.Config
99
}
10-
11-
func (m *Mysql) GetLogMode() string {
12-
return m.LogMode
13-
}

server/config/gorm_oracle.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,3 @@ func (m *Oracle) Dsn() string {
88
return "oracle://" + m.Username + ":" + m.Password + "@" + m.Path + ":" + m.Port + "/" + m.Dbname + "?" + m.Config
99

1010
}
11-
12-
func (m *Oracle) GetLogMode() string {
13-
return m.LogMode
14-
}

server/config/gorm_pgsql.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,3 @@ func (p *Pgsql) Dsn() string {
1515
func (p *Pgsql) LinkDsn(dbname string) string {
1616
return "host=" + p.Path + " user=" + p.Username + " password=" + p.Password + " dbname=" + dbname + " port=" + p.Port + " " + p.Config
1717
}
18-
19-
func (m *Pgsql) GetLogMode() string {
20-
return m.LogMode
21-
}

server/config/gorm_sqlite.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,3 @@ type Sqlite struct {
1111
func (s *Sqlite) Dsn() string {
1212
return filepath.Join(s.Path, s.Dbname+".db")
1313
}
14-
15-
func (s *Sqlite) GetLogMode() string {
16-
return s.LogMode
17-
}

server/initialize/internal/gorm.go

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,48 @@
11
package internal
22

33
import (
4+
"github.com/flipped-aurora/gin-vue-admin/server/config"
45
"github.com/flipped-aurora/gin-vue-admin/server/global"
56
"gorm.io/gorm"
67
"gorm.io/gorm/logger"
78
"gorm.io/gorm/schema"
9+
"log"
10+
"os"
11+
"time"
812
)
913

10-
type DBBASE interface {
11-
GetLogMode() string
12-
}
13-
1414
var Gorm = new(_gorm)
1515

1616
type _gorm struct{}
1717

1818
// Config gorm 自定义配置
1919
// Author [SliverHorn](https://github.com/SliverHorn)
2020
func (g *_gorm) Config(prefix string, singular bool) *gorm.Config {
21-
config := &gorm.Config{
22-
NamingStrategy: schema.NamingStrategy{
23-
TablePrefix: prefix,
24-
SingularTable: singular,
25-
},
26-
DisableForeignKeyConstraintWhenMigrating: true,
27-
}
28-
_default := NewZapLogger()
29-
var logMode DBBASE
21+
var general config.GeneralDB
3022
switch global.GVA_CONFIG.System.DbType {
3123
case "mysql":
32-
logMode = &global.GVA_CONFIG.Mysql
24+
general = global.GVA_CONFIG.Mysql.GeneralDB
3325
case "pgsql":
34-
logMode = &global.GVA_CONFIG.Pgsql
26+
general = global.GVA_CONFIG.Pgsql.GeneralDB
3527
case "oracle":
36-
logMode = &global.GVA_CONFIG.Oracle
28+
general = global.GVA_CONFIG.Oracle.GeneralDB
29+
case "sqlite":
30+
general = global.GVA_CONFIG.Sqlite.GeneralDB
31+
case "mssql":
32+
general = global.GVA_CONFIG.Mssql.GeneralDB
3733
default:
38-
logMode = &global.GVA_CONFIG.Mysql
34+
general = global.GVA_CONFIG.Mysql.GeneralDB
3935
}
40-
41-
switch logMode.GetLogMode() {
42-
case "silent", "Silent":
43-
config.Logger = _default.LogMode(logger.Silent)
44-
case "error", "Error":
45-
config.Logger = _default.LogMode(logger.Error)
46-
case "warn", "Warn":
47-
config.Logger = _default.LogMode(logger.Warn)
48-
case "info", "Info":
49-
config.Logger = _default.LogMode(logger.Info)
50-
default:
51-
config.Logger = _default.LogMode(logger.Info)
36+
return &gorm.Config{
37+
Logger: logger.New(NewWriter(general, log.New(os.Stdout, "\r\n", log.LstdFlags)), logger.Config{
38+
SlowThreshold: 200 * time.Millisecond,
39+
LogLevel: general.LogLevel(),
40+
Colorful: true,
41+
}),
42+
NamingStrategy: schema.NamingStrategy{
43+
TablePrefix: prefix,
44+
SingularTable: singular,
45+
},
46+
DisableForeignKeyConstraintWhenMigrating: true,
5247
}
53-
return config
5448
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package internal
2+
3+
import (
4+
"fmt"
5+
"github.com/flipped-aurora/gin-vue-admin/server/config"
6+
"go.uber.org/zap"
7+
"gorm.io/gorm/logger"
8+
)
9+
10+
type Writer struct {
11+
config config.GeneralDB
12+
writer logger.Writer
13+
}
14+
15+
func NewWriter(config config.GeneralDB, writer logger.Writer) *Writer {
16+
return &Writer{config: config, writer: writer}
17+
}
18+
19+
// Printf 格式化打印日志
20+
func (c *Writer) Printf(message string, data ...any) {
21+
if c.config.LogZap {
22+
switch c.config.LogLevel() {
23+
case logger.Silent:
24+
zap.L().Debug(fmt.Sprintf(message, data...))
25+
case logger.Error:
26+
zap.L().Error(fmt.Sprintf(message, data...))
27+
case logger.Warn:
28+
zap.L().Warn(fmt.Sprintf(message, data...))
29+
case logger.Info:
30+
zap.L().Info(fmt.Sprintf(message, data...))
31+
default:
32+
zap.L().Info(fmt.Sprintf(message, data...))
33+
}
34+
return
35+
}
36+
c.writer.Printf(message, data...)
37+
}

server/initialize/internal/logger.go

Lines changed: 0 additions & 66 deletions
This file was deleted.

0 commit comments

Comments
 (0)