Skip to content

Commit 71d0883

Browse files
SliverHornQM303176530
authored andcommitted
优化gorm的自定义logger代码, 升级gorm的版本为1.20.9, Makefile 添加goproxy代理
1 parent ee9022f commit 71d0883

File tree

4 files changed

+97
-93
lines changed

4 files changed

+97
-93
lines changed

server/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
.PHONY: all build run gotool clean help
22

3-
BINARY="server"
3+
BINARY="gin-vue-admin"
44
GVA = "gva"
55

66
all: check gva initdb run
77

88
gva:
9+
go env -w GO111MODULE=on
10+
go env -w GOPROXY=https://goproxy.io,direct
911
go build -o ${GVA} cmd/main.go
1012

1113
initdb:

server/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ require (
5454
gopkg.in/ini.v1 v1.55.0 // indirect
5555
gopkg.in/yaml.v2 v2.3.0 // indirect
5656
gorm.io/driver/mysql v0.3.0
57-
gorm.io/gorm v1.20.5
57+
gorm.io/gorm v1.20.9
5858
)
5959

60-
replace github.com/casbin/gorm-adapter/v3 => github.com/casbin/gorm-adapter/v3 v3.0.2
60+
replace github.com/casbin/gorm-adapter/v3 => github.com/casbin/gorm-adapter/v3 v3.0.2

server/initialize/gorm.go

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package initialize
22

33
import (
44
"gin-vue-admin/global"
5+
"gin-vue-admin/initialize/internal"
56
"gin-vue-admin/model"
67
"go.uber.org/zap"
78
"gorm.io/driver/mysql"
@@ -97,38 +98,24 @@ func GormMysql() *gorm.DB {
9798
//@return: *gorm.Config
9899

99100
func gormConfig(mod bool) *gorm.Config {
101+
var config = &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}
100102
switch global.GVA_CONFIG.Mysql.LogZap {
101-
case "Silent":
102-
return &gorm.Config{
103-
Logger: Default.LogMode(logger.Silent),
104-
DisableForeignKeyConstraintWhenMigrating: true,
105-
}
106-
case "Error":
107-
return &gorm.Config{
108-
Logger: Default.LogMode(logger.Error),
109-
DisableForeignKeyConstraintWhenMigrating: true,
110-
}
111-
case "Warn":
112-
return &gorm.Config{
113-
Logger: Default.LogMode(logger.Warn),
114-
DisableForeignKeyConstraintWhenMigrating: true,
115-
}
116-
case "Info":
117-
return &gorm.Config{
118-
Logger: Default.LogMode(logger.Info),
119-
DisableForeignKeyConstraintWhenMigrating: true,
120-
}
103+
case "silent", "Silent":
104+
config.Logger = internal.Default.LogMode(logger.Silent)
105+
case "error", "Error":
106+
config.Logger = internal.Default.LogMode(logger.Error)
107+
case "warn", "Warn":
108+
config.Logger = internal.Default.LogMode(logger.Warn)
109+
case "info", "Info":
110+
config.Logger = internal.Default.LogMode(logger.Info)
111+
case "zap", "Zap":
112+
config.Logger = internal.Default.LogMode(logger.Info)
121113
default:
122114
if mod {
123-
return &gorm.Config{
124-
Logger: logger.Default.LogMode(logger.Info),
125-
DisableForeignKeyConstraintWhenMigrating: true,
126-
}
127-
} else {
128-
return &gorm.Config{
129-
Logger: logger.Default.LogMode(logger.Silent),
130-
DisableForeignKeyConstraintWhenMigrating: true,
131-
}
115+
config.Logger = internal.Default.LogMode(logger.Info)
116+
break
132117
}
118+
config.Logger = internal.Default.LogMode(logger.Silent)
133119
}
120+
return config
134121
}
Lines changed: 76 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package initialize
1+
package internal
22

33
import (
44
"context"
@@ -13,25 +13,28 @@ import (
1313
"time"
1414
)
1515

16+
// writer log writer interface
17+
type writer interface {
18+
Printf(string, ...interface{})
19+
}
20+
21+
type config struct {
22+
SlowThreshold time.Duration
23+
Colorful bool
24+
LogLevel logger.LogLevel
25+
}
26+
1627
var (
17-
Discard = New(log.New(ioutil.Discard, "", log.LstdFlags), log.New(ioutil.Discard, "", log.LstdFlags), GormConfig{})
18-
Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), log.New(os.Stdout, "\r\n", log.LstdFlags), GormConfig{
28+
Discard = New(log.New(ioutil.Discard, "", log.LstdFlags), config{})
29+
Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), config{
1930
SlowThreshold: 200 * time.Millisecond,
2031
LogLevel: logger.Warn,
2132
Colorful: true,
2233
})
2334
Recorder = traceRecorder{Interface: Default, BeginAt: time.Now()}
2435
)
2536

26-
type traceRecorder struct {
27-
logger.Interface
28-
BeginAt time.Time
29-
SQL string
30-
RowsAffected int64
31-
Err error
32-
}
33-
34-
func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Interface {
37+
func New(writer writer, config config) logger.Interface {
3538
var (
3639
infoStr = "%s\n[info] "
3740
warnStr = "%s\n[warn] "
@@ -50,10 +53,9 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
5053
traceErrStr = logger.RedBold + "%s " + logger.MagentaBold + "%s\n" + logger.Reset + logger.Yellow + "[%.3fms] " + logger.BlueBold + "[rows:%v]" + logger.Reset + " %s"
5154
}
5255

53-
return &GormLogger{
54-
Writer: writer,
55-
gormWriter: gormWriter,
56-
GormConfig: config,
56+
return &customLogger{
57+
writer: writer,
58+
config: config,
5759
infoStr: infoStr,
5860
warnStr: warnStr,
5961
errStr: errStr,
@@ -63,81 +65,74 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
6365
}
6466
}
6567

66-
// Writer log writer interface
67-
type Writer interface {
68-
Printf(string, ...interface{})
69-
}
70-
71-
type GormConfig struct {
72-
SlowThreshold time.Duration
73-
Colorful bool
74-
LogLevel logger.LogLevel
75-
}
76-
77-
type GormLogger struct {
78-
Writer
79-
gormWriter logger.Writer
80-
GormConfig
68+
type customLogger struct {
69+
writer
70+
config
8171
infoStr, warnStr, errStr string
8272
traceStr, traceErrStr, traceWarnStr string
8373
}
8474

85-
func (g *GormLogger) LogMode(level logger.LogLevel) logger.Interface {
86-
newLogger := *g
75+
// LogMode log mode
76+
func (c *customLogger) LogMode(level logger.LogLevel) logger.Interface {
77+
newLogger := *c
8778
newLogger.LogLevel = level
8879
return &newLogger
8980
}
9081

91-
func (g *GormLogger) Info(ctx context.Context, message string, data ...interface{}) {
92-
if g.LogLevel >= logger.Info {
93-
g.Printf(g.infoStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
82+
// Info print info
83+
func (c *customLogger) Info(ctx context.Context, message string, data ...interface{}) {
84+
if c.LogLevel >= logger.Info {
85+
c.Printf(c.infoStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
9486
}
9587
}
9688

97-
func (g *GormLogger) Warn(ctx context.Context, message string, data ...interface{}) {
98-
if g.LogLevel >= logger.Warn {
99-
g.Printf(g.warnStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
89+
// Warn print warn messages
90+
func (c *customLogger) Warn(ctx context.Context, message string, data ...interface{}) {
91+
if c.LogLevel >= logger.Warn {
92+
c.Printf(c.warnStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
10093
}
10194
}
10295

103-
func (g *GormLogger) Error(ctx context.Context, message string, data ...interface{}) {
104-
if g.LogLevel >= logger.Error {
105-
g.Printf(g.errStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
96+
// Error print error messages
97+
func (c *customLogger) Error(ctx context.Context, message string, data ...interface{}) {
98+
if c.LogLevel >= logger.Error {
99+
c.Printf(c.errStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
106100
}
107101
}
108102

109-
func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
110-
if g.LogLevel > 0 {
103+
// Trace print sql message
104+
func (c *customLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
105+
if c.LogLevel > 0 {
111106
elapsed := time.Since(begin)
112107
switch {
113-
case err != nil && g.LogLevel >= logger.Error:
108+
case err != nil && c.LogLevel >= logger.Error:
114109
sql, rows := fc()
115110
if rows == -1 {
116-
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
111+
c.Printf(c.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
117112
} else {
118-
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
113+
c.Printf(c.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
119114
}
120-
case elapsed > g.SlowThreshold && g.SlowThreshold != 0 && g.LogLevel >= logger.Warn:
115+
case elapsed > c.SlowThreshold && c.SlowThreshold != 0 && c.LogLevel >= logger.Warn:
121116
sql, rows := fc()
122-
slowLog := fmt.Sprintf("SLOW SQL >= %v", g.SlowThreshold)
117+
slowLog := fmt.Sprintf("SLOW SQL >= %v", c.SlowThreshold)
123118
if rows == -1 {
124-
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
119+
c.Printf(c.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
125120
} else {
126-
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
121+
c.Printf(c.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
127122
}
128-
case g.LogLevel >= logger.Info:
123+
case c.LogLevel >= logger.Info:
129124
sql, rows := fc()
130125
if rows == -1 {
131-
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql)
126+
c.Printf(c.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql)
132127
} else {
133-
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql)
128+
c.Printf(c.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql)
134129
}
135130
}
136131
}
137132
}
138133

139-
func (g *GormLogger) Printf(message string, data ...interface{}) {
140-
if global.GVA_CONFIG.Mysql.LogZap == "Info" && !global.GVA_CONFIG.Mysql.LogMode {
134+
func (c *customLogger) Printf(message string, data ...interface{}) {
135+
if global.GVA_CONFIG.Mysql.LogZap != "" {
141136
switch len(data) {
142137
case 0:
143138
global.GVA_LOG.Info(message)
@@ -154,14 +149,34 @@ func (g *GormLogger) Printf(message string, data ...interface{}) {
154149
}
155150
switch len(data) {
156151
case 0:
157-
g.gormWriter.Printf(message, "")
152+
c.writer.Printf(message, "")
158153
case 1:
159-
g.gormWriter.Printf(message, data[0].(string))
154+
c.writer.Printf(message, data[0])
160155
case 2:
161-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64))
156+
c.writer.Printf(message, data[0], data[1])
162157
case 3:
163-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64), data[2].(string))
158+
c.writer.Printf(message, data[0], data[1], data[2])
164159
case 4:
165-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64), data[2].(string), data[3].(string))
160+
c.writer.Printf(message, data[0], data[1], data[2], data[3])
161+
case 5:
162+
c.writer.Printf(message, data[0], data[1], data[2], data[3], data[4])
166163
}
167164
}
165+
166+
type traceRecorder struct {
167+
logger.Interface
168+
BeginAt time.Time
169+
SQL string
170+
RowsAffected int64
171+
Err error
172+
}
173+
174+
func (t traceRecorder) New() *traceRecorder {
175+
return &traceRecorder{Interface: t.Interface, BeginAt: time.Now()}
176+
}
177+
178+
func (t *traceRecorder) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
179+
t.BeginAt = begin
180+
t.SQL, t.RowsAffected = fc()
181+
t.Err = err
182+
}

0 commit comments

Comments
 (0)