/
logger.go
120 lines (107 loc) · 3.14 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
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
package utils
import (
"os"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type Logger interface {
Debugf(template string, args ...interface{})
Debugw(template string, keysAndValues ...interface{})
Infof(template string, args ...interface{})
Infow(template string, keysAndValues ...interface{})
Warnf(template string, args ...interface{})
Warnw(template string, keysAndValues ...interface{})
Errorf(template string, args ...interface{})
Errorw(template string, keysAndValues ...interface{})
}
type logger struct {
// Logger *zap.Logger
Suger *zap.SugaredLogger
}
var (
devEncoder = zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
TimeKey: "time",
CallerKey: "caller",
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.UTC().Format("2006-01-02T15:04:05.000000-07:00"))
},
EncodeCaller: zapcore.ShortCallerEncoder,
EncodeDuration: func(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendInt64(int64(d) / 1000000)
},
})
prodEncoder = zapcore.NewJSONEncoder(zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
TimeKey: "time",
CallerKey: "caller",
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.UTC().Format("2006-01-02T15:04:05.000000-07:00"))
},
EncodeCaller: zapcore.ShortCallerEncoder,
EncodeDuration: func(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendInt64(int64(d) / 1000000)
},
})
)
func NewLogger(cfg *Config) Logger {
var encode zapcore.Encoder
var level zapcore.Level
if cfg.Dev {
encode = devEncoder
} else {
encode = prodEncoder
}
if cfg.LogLevel == "debug" {
level = zap.DebugLevel
} else if cfg.LogLevel == "info" {
level = zap.InfoLevel
} else {
level = zap.WarnLevel
}
var core = zapcore.NewTee(
zapcore.NewCore(encode, os.Stdout, level),
)
zapLogger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
return &logger{
// Logger: zapLogger,
Suger: zapLogger.Sugar(),
}
}
func (l *logger) Debugf(template string, args ...interface{}) {
defer l.Suger.Sync()
l.Suger.Debugf(template, args...)
}
func (l *logger) Debugw(template string, keysAndValues ...interface{}) {
defer l.Suger.Sync()
l.Suger.Debugw(template, keysAndValues...)
}
func (l *logger) Infof(template string, args ...interface{}) {
defer l.Suger.Sync()
l.Suger.Infof(template, args...)
}
func (l *logger) Infow(template string, keysAndValues ...interface{}) {
defer l.Suger.Sync()
l.Suger.Infow(template, keysAndValues...)
}
func (l *logger) Warnf(template string, args ...interface{}) {
defer l.Suger.Sync()
l.Suger.Warnf(template, args...)
}
func (l *logger) Warnw(template string, keysAndValues ...interface{}) {
defer l.Suger.Sync()
l.Suger.Warnw(template, keysAndValues...)
}
func (l *logger) Errorf(template string, args ...interface{}) {
defer l.Suger.Sync()
l.Suger.Errorf(template, args...)
}
func (l *logger) Errorw(template string, keysAndValues ...interface{}) {
defer l.Suger.Sync()
l.Suger.Errorw(template, keysAndValues...)
}