-
Notifications
You must be signed in to change notification settings - Fork 1
/
zaplogger.go
127 lines (106 loc) · 3.1 KB
/
zaplogger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package zap_log
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
// NewConsoleZapLogger 创建控制台样式zap logger(支持文件分割)
func NewConsoleZapLogger(level zapcore.Level, separator, fileName string, maxSize int, stdout, development bool) (*zap.Logger, zap.AtomicLevel) {
var write zapcore.WriteSyncer
if fileName != "" {
rollingWrite := lumberjack.Logger{
Filename: fileName,
MaxSize: maxSize,
}
write = zapcore.AddSync(&rollingWrite)
}
if stdout {
if write != nil {
write = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), write)
} else {
write = zapcore.AddSync(os.Stdout)
}
}
if write == nil {
panic("require at least one logger writer")
}
// 日志级别设置器
atomicLevel := zap.NewAtomicLevel()
atomicLevel.SetLevel(level)
// 日志编码配置器
encoderConfig := zapcore.EncoderConfig{
LevelKey: "level",
TimeKey: "timestamp",
CallerKey: "caller",
StacktraceKey: "stacktrace",
MessageKey: "msg",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
ConsoleSeparator: separator,
}
// 创建日志
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
write,
atomicLevel,
)
options := []zap.Option{zap.AddCaller(), zap.AddStacktrace(zap.DPanicLevel)}
if development {
options = append(options, zap.Development())
}
logger := zap.New(core, options...)
return logger, atomicLevel
}
// NewJsonZapLogger 创建Json样式zap logger(支持文件分割)
func NewJsonZapLogger(level zapcore.Level, fileName string, maxSize int, stdout, development bool) (*zap.Logger, zap.AtomicLevel) {
var write zapcore.WriteSyncer
if fileName != "" {
rollingWrite := lumberjack.Logger{
Filename: fileName,
MaxSize: maxSize,
}
write = zapcore.AddSync(&rollingWrite)
}
if stdout {
if write != nil {
write = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), write)
} else {
write = zapcore.AddSync(os.Stdout)
}
}
if write == nil {
panic("require at least one logger writer")
}
// 日志级别设置器
atomicLevel := zap.NewAtomicLevel()
atomicLevel.SetLevel(level)
// 日志编码配置器
encoderConfig := zapcore.EncoderConfig{
LevelKey: "level",
TimeKey: "timestamp",
CallerKey: "caller",
StacktraceKey: "stacktrace",
MessageKey: "msg",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// 创建日志
core := zapcore.NewCore(
zapcore.NewJSONEncoder(encoderConfig),
write,
atomicLevel,
)
options := []zap.Option{zap.AddCaller(), zap.AddStacktrace(zap.DPanicLevel)}
if development {
options = append(options, zap.Development())
}
logger := zap.New(core, options...)
return logger, atomicLevel
}