Skip to content

Commit e810a08

Browse files
committed
go-logging(停止维护了)替换成zap, zap的配置完善优化,gva的日志更换zap后的处理
1 parent 14ea277 commit e810a08

File tree

18 files changed

+104
-181
lines changed

18 files changed

+104
-181
lines changed

server/config.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ zap:
7373
# console: 控制台, json: json格式输出
7474
format: 'console'
7575
prefix: '[GIN-VUE-ADMIN]'
76-
director: 'logs'
77-
link_name: 'ZapLatestLog'
76+
director: 'log'
77+
link_name: 'latest_log'
7878
show_line: true
79+
# LowercaseLevelEncoder:小写, LowercaseColorLevelEncoder:小写带颜色,CapitalLevelEncoder: 大写, CapitalColorLevelEncoder: 大写带颜色,
80+
encode_level: 'LowercaseColorLevelEncoder'
81+
stacktrace_key: 'stacktrace'
7982
log_in_console: true

server/config/config.go

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package config
22

33
type Server struct {
4-
Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
5-
Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
6-
Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`
7-
Casbin Casbin `mapstructure:"casbin" json:"casbin" yaml:"casbin"`
8-
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
9-
System System `mapstructure:"system" json:"system" yaml:"system"`
10-
JWT JWT `mapstructure:"jwt" json:"jwt" yaml:"jwt"`
11-
Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"`
12-
Log Log `mapstructure:"log" json:"log" yaml:"log"`
13-
Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"`
4+
Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
5+
Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
6+
Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`
7+
Casbin Casbin `mapstructure:"casbin" json:"casbin" yaml:"casbin"`
8+
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
9+
System System `mapstructure:"system" json:"system" yaml:"system"`
10+
JWT JWT `mapstructure:"jwt" json:"jwt" yaml:"jwt"`
11+
Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"`
12+
Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"`
1413
LocalUpload LocalUpload `mapstructure:"localUpload" json:"localUpload" yaml:"localUpload"`
1514
}
1615

@@ -47,9 +46,9 @@ type Redis struct {
4746
}
4847

4948
type LocalUpload struct {
50-
Local bool `mapstructure:"local" json:"local" yaml:"local"`
49+
Local bool `mapstructure:"local" json:"local" yaml:"local"`
5150
AvatarPath string `mapstructure:"avatar-path" json:"avatarPath" yaml:"avatar-path"`
52-
FilePath string `mapstructure:"file-path" json:"filePath" yaml:"file-path"`
51+
FilePath string `mapstructure:"file-path" json:"filePath" yaml:"file-path"`
5352
}
5453

5554
type Qiniu struct {
@@ -65,13 +64,6 @@ type Captcha struct {
6564
ImgHeight int `mapstructure:"img-height" json:"imgHeight" yaml:"img-height"`
6665
}
6766

68-
type Log struct {
69-
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"`
70-
LogFile bool `mapstructure:"log-file" json:"logFile" yaml:"log-file"`
71-
Stdout string `mapstructure:"stdout" json:"stdout" yaml:"stdout"`
72-
File string `mapstructure:"file" json:"file" yaml:"file"`
73-
}
74-
7567
type Sqlite struct {
7668
Username string `mapstructure:"username" json:"username" yaml:"username"`
7769
Password string `mapstructure:"password" json:"password" yaml:"password"`
@@ -81,11 +73,13 @@ type Sqlite struct {
8173
}
8274

8375
type Zap struct {
84-
Level string `mapstructure:"level" json:"level" yaml:"level"`
85-
Format string `mapstructure:"format" json:"format" yaml:"format"`
86-
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"`
87-
Director string `mapstructure:"director" json:"director" yaml:"director"`
88-
LinkName string `mapstructure:"link_name" json:"linkName" yaml:"link_name"`
89-
ShowLine bool `mapstructure:"show_line" json:"show_line" yaml:"show_line"`
90-
LogInConsole bool `mapstructure:"log_in_console" json:"logInConsole" yaml:"log_in_console"`
76+
Level string `mapstructure:"level" json:"level" yaml:"level"`
77+
Format string `mapstructure:"format" json:"format" yaml:"format"`
78+
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"`
79+
Director string `mapstructure:"director" json:"director" yaml:"director"`
80+
LinkName string `mapstructure:"link_name" json:"linkName" yaml:"link_name"`
81+
ShowLine bool `mapstructure:"show_line" json:"showLine" yaml:"showLine"`
82+
EncodeLevel string `mapstructure:"encode_level" json:"encodeLevel" yaml:"encode_level"`
83+
StacktraceKey string `mapstructure:"stacktrace_key" json:"stacktraceKey" yaml:"stacktrace_key"`
84+
LogInConsole bool `mapstructure:"log_in_console" json:"logInConsole" yaml:"log_in_console"`
9185
}

server/core/log.go

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

server/core/server.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"gin-vue-admin/global"
66
"gin-vue-admin/initialize"
7+
"go.uber.org/zap"
78
"time"
89
)
910

@@ -24,11 +25,11 @@ func RunWindowsServer() {
2425
// 保证文本顺序输出
2526
// In order to ensure that the text order output can be deleted
2627
time.Sleep(10 * time.Microsecond)
27-
global.GVA_LOG.Debug("server run success on ", address)
28+
global.GVA_LOG.Debug("server run success on ", zap.String("address", address))
2829

2930
fmt.Printf(`欢迎使用 Gin-Vue-Admin
3031
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
3132
默认前端文件运行地址:http://127.0.0.1:8080
3233
`, address)
33-
global.GVA_LOG.Error(s.ListenAndServe())
34+
global.GVA_LOG.Error(s.ListenAndServe().Error())
3435
}

server/core/zap.go

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ import (
1313

1414
var (
1515
err error
16-
level zapcore.Level
16+
level zapcore.Level
1717
writer zapcore.WriteSyncer
1818
)
1919

2020
func init() {
21-
if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有logs文件夹
22-
fmt.Println("create logs directory") // directory not exist
21+
if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有Director文件夹
22+
fmt.Printf("create %v directory\n", global.GVA_CONFIG.Zap.Director)
2323
_ = os.Mkdir(global.GVA_CONFIG.Zap.Director, os.ModePerm)
2424
}
2525

26-
switch global.GVA_CONFIG.Zap.Level {// 初始化配置文件的Level
26+
switch global.GVA_CONFIG.Zap.Level { // 初始化配置文件的Level
2727
case "debug":
2828
level = zap.DebugLevel
2929
case "info":
@@ -32,6 +32,12 @@ func init() {
3232
level = zap.WarnLevel
3333
case "error":
3434
level = zap.ErrorLevel
35+
case "dpanic":
36+
level = zap.DPanicLevel
37+
case "panic":
38+
level = zap.PanicLevel
39+
case "fatal":
40+
level = zap.FatalLevel
3541
default:
3642
level = zap.InfoLevel
3743
}
@@ -43,23 +49,19 @@ func init() {
4349
}
4450

4551
if level == zap.DebugLevel || level == zap.ErrorLevel {
46-
global.GVA_ZAP = zap.New(getEncoderCore(), zap.AddStacktrace(level))
47-
if global.GVA_CONFIG.Zap.ShowLine {
48-
global.GVA_ZAP.WithOptions(zap.AddCaller())
49-
}
50-
return
52+
global.GVA_LOG = zap.New(getEncoderCore(), zap.AddStacktrace(level))
53+
} else {
54+
global.GVA_LOG = zap.New(getEncoderCore())
5155
}
52-
global.GVA_ZAP = zap.New(getEncoderCore())
5356
if global.GVA_CONFIG.Zap.ShowLine {
54-
global.GVA_ZAP.WithOptions(zap.AddCaller())
57+
global.GVA_LOG.WithOptions(zap.AddCaller())
5558
}
56-
5759
}
5860

5961
// getWriteSyncer zap logger中加入file-rotatelogs
6062
func getWriteSyncer() (zapcore.WriteSyncer, error) {
6163
fileWriter, err := zaprotatelogs.New(
62-
global.GVA_CONFIG.Zap.Director+string(os.PathSeparator)+"%Y-%m-%d-%H-%M.log",
64+
global.GVA_CONFIG.Zap.Director+string(os.PathSeparator)+"%Y-%m-%d.log",
6365
zaprotatelogs.WithLinkName(global.GVA_CONFIG.Zap.LinkName),
6466
zaprotatelogs.WithMaxAge(7*24*time.Hour),
6567
zaprotatelogs.WithRotationTime(24*time.Hour),
@@ -78,18 +80,41 @@ func getEncoderConfig() (config zapcore.EncoderConfig) {
7880
TimeKey: "time",
7981
NameKey: "logger",
8082
CallerKey: "caller",
81-
StacktraceKey: "stacktrace",
83+
StacktraceKey: global.GVA_CONFIG.Zap.StacktraceKey,
8284
LineEnding: zapcore.DefaultLineEnding,
83-
EncodeLevel: zapcore.CapitalColorLevelEncoder,
85+
EncodeLevel: zapcore.CapitalLevelEncoder,
8486
EncodeTime: CustomTimeEncoder,
8587
EncodeDuration: zapcore.SecondsDurationEncoder,
8688
EncodeCaller: zapcore.FullCallerEncoder,
8789
}
90+
switch {
91+
case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console" : // console小写编码器
92+
config.EncodeLevel = zapcore.LowercaseLevelEncoder
93+
case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json" : // json小写编码器
94+
config.EncodeLevel = zapcore.LowercaseLevelEncoder
95+
case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console小写编码器带颜色
96+
config.EncodeLevel = zapcore.LowercaseColorLevelEncoder
97+
case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json小写编码器带颜色
98+
config.EncodeLevel = zapcore.LowercaseColorLevelEncoder
99+
case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console大写编码器
100+
config.EncodeLevel = zapcore.CapitalLevelEncoder
101+
case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json大写编码器
102+
config.EncodeLevel = zapcore.CapitalLevelEncoder
103+
case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console 大写编码器带颜色
104+
config.EncodeLevel = zapcore.CapitalColorLevelEncoder
105+
case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json 大写编码器带颜色
106+
config.EncodeLevel = zapcore.CapitalColorLevelEncoder
107+
default:
108+
config.EncodeLevel = zapcore.LowercaseLevelEncoder
109+
}
88110
return config
89111
}
90112

91113
// getEncoder 获取zapcore.Encoder
92114
func getEncoder() zapcore.Encoder {
115+
if global.GVA_CONFIG.Zap.Format == "json" {
116+
return zapcore.NewJSONEncoder(getEncoderConfig())
117+
}
93118
return zapcore.NewConsoleEncoder(getEncoderConfig())
94119
}
95120

@@ -100,5 +125,5 @@ func getEncoderCore() (core zapcore.Core) {
100125

101126
// 自定义日志输出时间格式
102127
func CustomTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
103-
enc.AppendString(t.Format(global.GVA_CONFIG.Zap.Prefix+"2006/01/02 - 15:04:05.000"))
128+
enc.AppendString(t.Format(global.GVA_CONFIG.Zap.Prefix + "2006/01/02 - 15:04:05.000"))
104129
}

server/global/global.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"gin-vue-admin/config"
77
"github.com/go-redis/redis"
8-
oplogging "github.com/op/go-logging"
98
"github.com/spf13/viper"
109
"gorm.io/gorm"
1110
)
@@ -15,6 +14,6 @@ var (
1514
GVA_REDIS *redis.Client
1615
GVA_CONFIG config.Server
1716
GVA_VP *viper.Viper
18-
GVA_LOG *oplogging.Logger
19-
GVA_ZAP *zap.Logger
17+
//GVA_LOG *oplogging.Logger
18+
GVA_LOG *zap.Logger
2019
)

server/go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@ require (
2323
github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible
2424
github.com/lestrrat-go/strftime v1.0.3 // indirect
2525
github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect
26-
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f
2726
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect
2827
github.com/mailru/easyjson v0.7.1 // indirect
2928
github.com/mitchellh/mapstructure v1.2.2 // indirect
3029
github.com/mojocn/base64Captcha v1.3.1
3130
github.com/onsi/ginkgo v1.7.0 // indirect
3231
github.com/onsi/gomega v1.4.3 // indirect
33-
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
3432
github.com/pelletier/go-toml v1.6.0 // indirect
3533
github.com/pkg/errors v0.9.1 // indirect
3634
github.com/qiniu/api.v7/v7 v7.4.1

server/initialize/data.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package initialize
33
import (
44
"gin-vue-admin/global"
55
"gin-vue-admin/service"
6+
"go.uber.org/zap"
67
)
78

89
func Data() {
@@ -20,7 +21,7 @@ func Data() {
2021
err = service.InitSysDictionaryDetail()
2122
err = service.InitExaFileUploadAndDownload()
2223
if err != nil {
23-
global.GVA_LOG.Error("initialize data failed", err)
24+
global.GVA_LOG.Error("initialize data failed", zap.Any("err", err))
2425
}
2526
global.GVA_LOG.Debug("initialize data success")
2627
}

server/initialize/db_table.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package initialize
33
import (
44
"gin-vue-admin/global"
55
"gin-vue-admin/model"
6+
"go.uber.org/zap"
67
"os"
78
)
89

@@ -28,7 +29,7 @@ func DBTables() {
2829
model.SysOperationRecord{},
2930
)
3031
if err != nil {
31-
global.GVA_LOG.Error("register table failed", err)
32+
global.GVA_LOG.Error("register table failed", zap.Any("err", err))
3233
os.Exit(0)
3334
}
3435
global.GVA_LOG.Debug("register table success")

0 commit comments

Comments
 (0)