Skip to content

Commit 012f256

Browse files
committed
zap日志的配置优化及初始化优化
1 parent 01c4206 commit 012f256

File tree

3 files changed

+81
-38
lines changed

3 files changed

+81
-38
lines changed

server/config.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,12 @@ log:
6868

6969
# zap logger configuration
7070
zap:
71-
level: "debug"
72-
file: "DEBUG"
73-
max_size: 200
74-
max_age: 30
75-
max_backups: 7
71+
# 可使用 "debug", "info", "warn", "error", "dpanic", "panic", "fatal",
72+
level: 'debug'
73+
# console: 控制台, json: json格式输出
74+
format: 'console'
75+
prefix: '[GIN-VUE-ADMIN]'
76+
director: 'logs'
77+
link_name: 'ZapLatestLog'
78+
show_line: true
79+
log_in_console: true

server/config/config.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@ type Sqlite struct {
8181
}
8282

8383
type Zap struct {
84-
Level string `json:"level"`
85-
File string `json:"file"`
86-
MaxSize int `json:"maxsize"`
87-
MaxAge int `json:"max_age"`
88-
MaxBackups int `json:"max_backups"`
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"`
8991
}

server/core/zap.go

Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,94 @@ import (
1111
"time"
1212
)
1313

14-
const (
15-
zapLogDir = "log"
16-
zapLogSoftLink = "latest_log"
17-
zapModule = "gin-vue-admin"
14+
var (
15+
err error
16+
level zapcore.Level
17+
writer zapcore.WriteSyncer
1818
)
1919

2020
func init() {
21-
if global.GVA_CONFIG.Zap.File == "" {
22-
global.GVA_CONFIG.Zap.File = "DEBUG"
21+
if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有logs文件夹
22+
fmt.Println("create logs directory") // directory not exist
23+
_ = os.Mkdir(global.GVA_CONFIG.Zap.Director, os.ModePerm)
2324
}
24-
if ok, _ := utils.PathExists(zapLogDir); !ok {
25-
// directory not exist
26-
fmt.Println("create log directory")
27-
_ = os.Mkdir(zapLogDir, os.ModePerm)
25+
26+
switch global.GVA_CONFIG.Zap.Level {// 初始化配置文件的Level
27+
case "debug":
28+
level = zap.DebugLevel
29+
case "info":
30+
level = zap.InfoLevel
31+
case "warn":
32+
level = zap.WarnLevel
33+
case "error":
34+
level = zap.ErrorLevel
35+
default:
36+
level = zap.InfoLevel
2837
}
29-
var l = new(zapcore.Level)
30-
writeSyncer, err := getWriteSyncer()
38+
39+
writer, err = getWriteSyncer() // 使用file-rotatelogs进行日志分割
3140
if err != nil {
3241
fmt.Printf("Get Write Syncer Failed err:%v", err.Error())
3342
return
3443
}
35-
encoder := getEncoderConfig()
36-
if err := l.UnmarshalText([]byte(global.GVA_CONFIG.Zap.Level)); err != nil {
37-
fmt.Printf("Unmarshal Level Failed err:%v", err.Error())
44+
45+
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+
}
3850
return
3951
}
40-
core := zapcore.NewCore(encoder, writeSyncer, l)
41-
global.GVA_ZAP = zap.New(core, zap.AddCaller())
52+
global.GVA_ZAP = zap.New(getEncoderCore())
53+
if global.GVA_CONFIG.Zap.ShowLine {
54+
global.GVA_ZAP.WithOptions(zap.AddCaller())
55+
}
56+
4257
}
4358

4459
// getWriteSyncer zap logger中加入file-rotatelogs
4560
func getWriteSyncer() (zapcore.WriteSyncer, error) {
4661
fileWriter, err := zaprotatelogs.New(
47-
zapLogDir + string(os.PathSeparator) + "%Y-%m-%d-%H-%M.log",
48-
zaprotatelogs.WithLinkName(zapLogSoftLink),
62+
global.GVA_CONFIG.Zap.Director+string(os.PathSeparator)+"%Y-%m-%d-%H-%M.log",
63+
zaprotatelogs.WithLinkName(global.GVA_CONFIG.Zap.LinkName),
4964
zaprotatelogs.WithMaxAge(7*24*time.Hour),
5065
zaprotatelogs.WithRotationTime(24*time.Hour),
5166
)
67+
if global.GVA_CONFIG.Zap.LogInConsole {
68+
return zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(fileWriter)), err
69+
}
5270
return zapcore.AddSync(fileWriter), err
5371
}
5472

55-
// getEncoderConfig 获取zapcore.Encoder
56-
func getEncoderConfig() zapcore.Encoder {
57-
encoderConfig := zap.NewProductionEncoderConfig()
58-
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
59-
encoderConfig.TimeKey = "time"
60-
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
61-
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
62-
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
63-
return zapcore.NewConsoleEncoder(encoderConfig)
73+
// getEncoderConfig 获取zapcore.EncoderConfig
74+
func getEncoderConfig() (config zapcore.EncoderConfig) {
75+
config = zapcore.EncoderConfig{
76+
MessageKey: "message",
77+
LevelKey: "level",
78+
TimeKey: "time",
79+
NameKey: "logger",
80+
CallerKey: "caller",
81+
StacktraceKey: "stacktrace",
82+
LineEnding: zapcore.DefaultLineEnding,
83+
EncodeLevel: zapcore.CapitalColorLevelEncoder,
84+
EncodeTime: CustomTimeEncoder,
85+
EncodeDuration: zapcore.SecondsDurationEncoder,
86+
EncodeCaller: zapcore.FullCallerEncoder,
87+
}
88+
return config
6489
}
6590

91+
// getEncoder 获取zapcore.Encoder
92+
func getEncoder() zapcore.Encoder {
93+
return zapcore.NewConsoleEncoder(getEncoderConfig())
94+
}
6695

96+
// getEncoderCore 获取Encoder的zapcore.Core
97+
func getEncoderCore() (core zapcore.Core) {
98+
return zapcore.NewCore(getEncoder(), writer, level)
99+
}
67100

101+
// 自定义日志输出时间格式
102+
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"))
104+
}

0 commit comments

Comments
 (0)