/
logger.go
71 lines (62 loc) · 1.25 KB
/
logger.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
package logger
import (
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// New zap logger
func New(setters ...Option) *zap.Logger {
// Default Options
args := &Options{
Level: zap.ErrorLevel,
Encoder: zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
}
for _, setter := range setters {
setter(args)
}
loggingLevel := zap.NewAtomicLevel()
loggingLevel.SetLevel(args.Level)
return zap.New(zapcore.NewCore(
args.Encoder,
zapcore.Lock(os.Stdout),
loggingLevel,
))
}
type Options struct {
Level zapcore.Level
Encoder zapcore.Encoder
}
type Option func(*Options)
func Level(level string) Option {
return func(args *Options) {
var lv zapcore.Level
switch level {
case "panic":
lv = zap.PanicLevel
case "fatal":
lv = zap.FatalLevel
case "warn":
lv = zap.WarnLevel
case "info":
lv = zap.InfoLevel
case "debug":
lv = zap.DebugLevel
default:
lv = zap.ErrorLevel
}
args.Level = lv
}
}
func Encoder(format string) Option {
return func(args *Options) {
var enc zapcore.Encoder
switch format {
case "console":
enc = zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
case "json":
default:
enc = zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
}
args.Encoder = enc
}
}