Skip to content

Commit 52f5e83

Browse files
author
奇淼(piexlmax
authored
Merge pull request flipped-aurora#283 from SliverHorn/sliverhorn_dev
gorm日志收集进log功能
2 parents f4e7dd9 + 92c7ae1 commit 52f5e83

22 files changed

+203
-34
lines changed

server/config.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ mysql:
5656
config: 'charset=utf8mb4&parseTime=True&loc=Local'
5757
db-name: 'qmPlus'
5858
username: 'root'
59-
password: 'root123'
59+
password: 'Aa@6447985'
6060
max-idle-conns: 10
6161
max-open-conns: 100
6262
log-mode: false
63+
log-zap: false
6364

6465
# local configuration
6566
local:

server/config/gorm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ type Mysql struct {
99
MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
1010
MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
1111
LogMode bool `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
12+
LogZap bool `mapstructure:"log-zap" json:"logZap" yaml:"log-zap"`
1213
}

server/core/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func RunWindowsServer() {
2929

3030
fmt.Printf(`
3131
欢迎使用 Gin-Vue-Admin
32-
当前版本:V2.3.6
32+
当前版本:V2.3.7
3333
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
3434
默认前端文件运行地址:http://127.0.0.1:8080
3535
如果项目让您获得了收益,希望您能请团队喝杯可乐:https://www.gin-vue-admin.com/docs/coffee

server/initialize/gorm.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ func GormMysql() *gorm.DB {
7373

7474
// gormConfig 根据配置决定是否开启日志
7575
func gormConfig(mod bool) *gorm.Config {
76+
if global.GVA_CONFIG.Mysql.LogZap {
77+
return &gorm.Config{
78+
Logger: Default.LogMode(logger.Info),
79+
DisableForeignKeyConstraintWhenMigrating: true,
80+
}
81+
}
7682
if mod {
7783
return &gorm.Config{
7884
Logger: logger.Default.LogMode(logger.Info),

server/initialize/logger.go

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package initialize
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"gin-vue-admin/global"
7+
"go.uber.org/zap"
8+
"gorm.io/gorm/logger"
9+
"gorm.io/gorm/utils"
10+
"io/ioutil"
11+
"log"
12+
"os"
13+
"time"
14+
)
15+
16+
var (
17+
Discard = New(log.New(ioutil.Discard, "", log.LstdFlags), GormConfig{})
18+
Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), GormConfig{
19+
SlowThreshold: 200 * time.Millisecond,
20+
LogLevel: logger.Warn,
21+
Colorful: true,
22+
})
23+
Recorder = traceRecorder{Interface: Default, BeginAt: time.Now()}
24+
)
25+
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, config GormConfig) logger.Interface {
35+
var (
36+
infoStr = "%s\n[info] "
37+
warnStr = "%s\n[warn] "
38+
errStr = "%s\n[error] "
39+
traceStr = "%s\n[%.3fms] [rows:%v] %s"
40+
traceWarnStr = "%s %s\n[%.3fms] [rows:%v] %s"
41+
traceErrStr = "%s %s\n[%.3fms] [rows:%v] %s"
42+
)
43+
44+
if config.Colorful {
45+
infoStr = logger.Green + "%s\n" + logger.Reset + logger.Green + "[info] " + logger.Reset
46+
warnStr = logger.BlueBold + "%s\n" + logger.Reset + logger.Magenta + "[warn] " + logger.Reset
47+
errStr = logger.Magenta + "%s\n" + logger.Reset + logger.Red + "[error] " + logger.Reset
48+
traceStr = logger.Green + "%s\n" + logger.Reset + logger.Yellow + "[%.3fms] " + logger.BlueBold + "[rows:%v]" + logger.Reset + " %s"
49+
traceWarnStr = logger.Green + "%s " + logger.Yellow + "%s\n" + logger.Reset + logger.RedBold + "[%.3fms] " + logger.Yellow + "[rows:%v]" + logger.Magenta + " %s" + logger.Reset
50+
traceErrStr = logger.RedBold + "%s " + logger.MagentaBold + "%s\n" + logger.Reset + logger.Yellow + "[%.3fms] " + logger.BlueBold + "[rows:%v]" + logger.Reset + " %s"
51+
}
52+
53+
return &GormLogger{
54+
Writer: writer,
55+
GormConfig: config,
56+
infoStr: infoStr,
57+
warnStr: warnStr,
58+
errStr: errStr,
59+
traceStr: traceStr,
60+
traceWarnStr: traceWarnStr,
61+
traceErrStr: traceErrStr,
62+
}
63+
}
64+
65+
// Writer log writer interface
66+
type Writer interface {
67+
Printf(string, ...interface{})
68+
}
69+
70+
type GormConfig struct {
71+
SlowThreshold time.Duration
72+
Colorful bool
73+
LogLevel logger.LogLevel
74+
}
75+
76+
type GormLogger struct {
77+
Writer
78+
GormConfig
79+
infoStr, warnStr, errStr string
80+
traceStr, traceErrStr, traceWarnStr string
81+
}
82+
83+
func (g *GormLogger) LogMode(level logger.LogLevel) logger.Interface {
84+
newLogger := *g
85+
newLogger.LogLevel = level
86+
return &newLogger
87+
}
88+
89+
func (g *GormLogger) Info(ctx context.Context, message string, data ...interface{}) {
90+
if g.LogLevel >= logger.Info {
91+
g.Printf(g.infoStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
92+
}
93+
}
94+
95+
func (g *GormLogger) Warn(ctx context.Context, message string, data ...interface{}) {
96+
if g.LogLevel >= logger.Warn {
97+
g.Printf(g.warnStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
98+
}
99+
}
100+
101+
func (g *GormLogger) Error(ctx context.Context, message string, data ...interface{}) {
102+
if g.LogLevel >= logger.Error {
103+
g.Printf(g.errStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
104+
}
105+
}
106+
107+
func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
108+
if g.LogLevel > 0 {
109+
elapsed := time.Since(begin)
110+
switch {
111+
case err != nil && g.LogLevel >= logger.Error:
112+
sql, rows := fc()
113+
if rows == -1 {
114+
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
115+
} else {
116+
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
117+
}
118+
case elapsed > g.SlowThreshold && g.SlowThreshold != 0 && g.LogLevel >= logger.Warn:
119+
sql, rows := fc()
120+
slowLog := fmt.Sprintf("SLOW SQL >= %v", g.SlowThreshold)
121+
if rows == -1 {
122+
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
123+
} else {
124+
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
125+
}
126+
case g.LogLevel >= logger.Info:
127+
sql, rows := fc()
128+
if rows == -1 {
129+
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql)
130+
} else {
131+
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql)
132+
}
133+
}
134+
}
135+
}
136+
137+
func (g *GormLogger) Printf(message string, data ...interface{}) {
138+
switch len(data) {
139+
case 0:
140+
global.GVA_LOG.Info(message)
141+
case 1:
142+
global.GVA_LOG.Info("gorm", zap.Any("src", data[0]))
143+
case 2:
144+
global.GVA_LOG.Info("gorm", zap.Any("src", data[0]), zap.Any("duration", data[1]))
145+
case 3:
146+
global.GVA_LOG.Info("gorm", zap.Any("src", data[0]), zap.Any("duration", data[1]), zap.Any("rows", data[2]))
147+
case 4:
148+
global.GVA_LOG.Info("gorm", zap.Any("src", data[0]), zap.Any("duration", data[1]), zap.Any("rows", data[2]), zap.Any("sql", data[3]))
149+
}
150+
}

server/initialize/router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func Routers() *gin.Engine {
2929
router.InitBaseRouter(PublicGroup) // 注册基础功能路由 不做鉴权
3030
}
3131
PrivateGroup := Router.Group("")
32-
PrivateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()).Use(middleware.OperationRecord())
32+
PrivateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
3333
{
3434
router.InitApiRouter(PrivateGroup) // 注册功能api路由
3535
router.InitJwtRouter(PrivateGroup) // jwt相关路由

server/middleware/operation.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"io/ioutil"
1212
"net/http"
1313
"strconv"
14-
"strings"
1514
"time"
1615
)
1716

@@ -31,7 +30,7 @@ func OperationRecord() gin.HandlerFunc {
3130
if claims, ok := c.Get("claims"); ok {
3231
waitUse := claims.(*request.CustomClaims)
3332
userId = int(waitUse.ID)
34-
}else {
33+
} else {
3534
id, err := strconv.Atoi(c.Request.Header.Get("x-user-id"))
3635
if err != nil {
3736
userId = 0
@@ -46,10 +45,11 @@ func OperationRecord() gin.HandlerFunc {
4645
Body: string(body),
4746
UserID: userId,
4847
}
49-
values := c.Request.Header.Values("content-type")
50-
if len(values) >0 && strings.Contains(values[0], "boundary") {
51-
record.Body = "file"
52-
}
48+
// 存在某些未知错误 TODO
49+
//values := c.Request.Header.Values("content-type")
50+
//if len(values) >0 && strings.Contains(values[0], "boundary") {
51+
// record.Body = "file"
52+
//}
5353
writer := responseBodyWriter{
5454
ResponseWriter: c.Writer,
5555
body: &bytes.Buffer{},

server/router/exp_customer.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package router
22

33
import (
44
"gin-vue-admin/api/v1"
5+
"gin-vue-admin/middleware"
56
"github.com/gin-gonic/gin"
67
)
78

89
func InitCustomerRouter(Router *gin.RouterGroup) {
9-
ApiRouter := Router.Group("customer")
10+
ApiRouter := Router.Group("customer").Use(middleware.OperationRecord())
1011
{
1112
ApiRouter.POST("customer", v1.CreateExaCustomer) // 创建客户
1213
ApiRouter.PUT("customer", v1.UpdateExaCustomer) // 更新客户

server/router/sys_api.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package router
22

33
import (
44
"gin-vue-admin/api/v1"
5+
"gin-vue-admin/middleware"
56
"github.com/gin-gonic/gin"
67
)
78

89
func InitApiRouter(Router *gin.RouterGroup) {
9-
ApiRouter := Router.Group("api")
10+
ApiRouter := Router.Group("api").Use(middleware.OperationRecord())
1011
{
1112
ApiRouter.POST("createApi", v1.CreateApi) // 创建Api
1213
ApiRouter.POST("deleteApi", v1.DeleteApi) // 删除Api

server/router/sys_authority.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package router
22

33
import (
44
"gin-vue-admin/api/v1"
5+
"gin-vue-admin/middleware"
56
"github.com/gin-gonic/gin"
67
)
78

89
func InitAuthorityRouter(Router *gin.RouterGroup) {
9-
AuthorityRouter := Router.Group("authority")
10+
AuthorityRouter := Router.Group("authority").Use(middleware.OperationRecord())
1011
{
1112
AuthorityRouter.POST("createAuthority", v1.CreateAuthority) // 创建角色
1213
AuthorityRouter.POST("deleteAuthority", v1.DeleteAuthority) // 删除角色

0 commit comments

Comments
 (0)