/
logger.go
64 lines (51 loc) · 1.38 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
package logger
import (
"log"
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func NewNoop() *zap.Logger {
return zap.NewNop()
}
func NewZap(cfg *Config) *zap.Logger {
return zap.New(
zapcore.NewCore(Encoder(cfg), WriteSyncer(cfg), LoggerLevel(cfg)),
Options(cfg)...,
)
}
func Encoder(cfg *Config) zapcore.Encoder {
var encoderConfig zapcore.EncoderConfig
if cfg.Development {
encoderConfig = zap.NewDevelopmentEncoderConfig()
encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
} else {
encoderConfig = zap.NewProductionEncoderConfig()
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
}
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
var encoder zapcore.Encoder
if cfg.Encoding == "console" {
encoder = zapcore.NewConsoleEncoder(encoderConfig)
} else {
encoder = zapcore.NewJSONEncoder(encoderConfig)
}
return encoder
}
func WriteSyncer(cfg *Config) zapcore.WriteSyncer {
return zapcore.Lock(os.Stdout)
}
func LoggerLevel(cfg *Config) zap.AtomicLevel {
var level zapcore.Level
if err := level.Set(cfg.Level); err != nil {
log.Printf("using debug level for zap due to an error in user's config value %s", cfg.Level)
return zap.NewAtomicLevelAt(zapcore.DebugLevel)
}
return zap.NewAtomicLevelAt(level)
}
func Options(cfg *Config) []zap.Option {
return []zap.Option{
zap.AddStacktrace(zap.ErrorLevel),
zap.AddCaller(),
}
}