-
Notifications
You must be signed in to change notification settings - Fork 0
/
zap_adapter.go
122 lines (100 loc) · 2.37 KB
/
zap_adapter.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
package xzap
import (
"time"
"github.com/AlexandrGurkin/common/xlog"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type xZap struct {
l *zap.Logger
s *zap.SugaredLogger
}
func NewXZap(cfg xlog.LoggerCfg) (xlog.Logger, error) {
if cfg.TimeFormat == "" {
cfg.TimeFormat = time.RFC3339Nano
}
encoderCfg := zapcore.EncoderConfig{
MessageKey: "message",
LevelKey: "level",
NameKey: "logger",
TimeKey: "time",
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.TimeEncoderOfLayout(cfg.TimeFormat),
EncodeDuration: zapcore.StringDurationEncoder,
}
level := zapcore.DebugLevel
if cfg.Level != "" {
if cfg.Level == "trace" { //zap(
cfg.Level = "debug"
}
if err := level.Set(cfg.Level); err != nil {
return nil, xlog.ErrorInitLogger.Wrap(err)
}
}
var out zapcore.WriteSyncer
var ok bool
if out, ok = cfg.Out.(zapcore.WriteSyncer); !ok {
out = zapcore.AddSync(cfg.Out)
}
core := zapcore.NewCore(zapcore.NewJSONEncoder(encoderCfg), out, level)
logger := zap.New(core)
sugar := logger.Sugar()
return &xZap{logger, sugar}, nil
}
func (z *xZap) Debugf(format string, args ...interface{}) {
z.s.Debugf(format, args...)
}
func (z *xZap) Infof(format string, args ...interface{}) {
z.s.Infof(format, args...)
}
func (z *xZap) Warnf(format string, args ...interface{}) {
z.s.Warnf(format, args...)
}
func (z *xZap) Tracef(format string, args ...interface{}) {
z.s.Debugf(format, args...)
}
func (z *xZap) Errorf(format string, args ...interface{}) {
z.s.Errorf(format, args...)
}
func (z *xZap) Fatalf(format string, args ...interface{}) {
z.s.Fatalf(format, args...)
}
func (z *xZap) Debug(msg string) {
z.l.Debug(msg)
}
func (z *xZap) Info(msg string) {
z.l.Info(msg)
}
func (z *xZap) Warn(msg string) {
z.l.Warn(msg)
}
func (z *xZap) Trace(msg string) {
z.l.Debug(msg)
}
func (z *xZap) Error(msg string) {
z.l.Error(msg)
}
func (z *xZap) Fatal(msg string) {
z.l.Fatal(msg)
}
func (z *xZap) WithXFields(fields xlog.Fields) xlog.Logger {
fs := make([]interface{}, 0, len(fields))
for k, v := range fields {
fs = append(fs, k)
fs = append(fs, v)
}
sugar := z.s.With(fs...)
log := sugar.Desugar()
return &xZap{
l: log,
s: sugar,
}
}
func (z *xZap) WithXField(key string, value interface{}) xlog.Logger {
sugar := z.s.With(key, value)
log := sugar.Desugar()
return &xZap{
l: log,
s: sugar,
}
}