...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package zapgrpc
23
24 import (
25 "fmt"
26
27 "go.uber.org/zap"
28 "go.uber.org/zap/zapcore"
29 )
30
31
32 const (
33 grpcLvlInfo int = iota
34 grpcLvlWarn
35 grpcLvlError
36 grpcLvlFatal
37 )
38
39
40
41 var _grpcToZapLevel = map[int]zapcore.Level{
42 grpcLvlInfo: zapcore.InfoLevel,
43 grpcLvlWarn: zapcore.WarnLevel,
44 grpcLvlError: zapcore.ErrorLevel,
45 grpcLvlFatal: zapcore.FatalLevel,
46 }
47
48
49 type Option interface {
50 apply(*Logger)
51 }
52
53 type optionFunc func(*Logger)
54
55 func (f optionFunc) apply(log *Logger) {
56 f(log)
57 }
58
59
60
61
62
63
64 func WithDebug() Option {
65 return optionFunc(func(logger *Logger) {
66 logger.print = &printer{
67 enab: logger.levelEnabler,
68 level: zapcore.DebugLevel,
69 print: logger.delegate.Debug,
70 printf: logger.delegate.Debugf,
71 }
72 })
73 }
74
75
76
77 func withWarn() Option {
78 return optionFunc(func(logger *Logger) {
79 logger.fatal = &printer{
80 enab: logger.levelEnabler,
81 level: zapcore.WarnLevel,
82 print: logger.delegate.Warn,
83 printf: logger.delegate.Warnf,
84 }
85 })
86 }
87
88
89 func NewLogger(l *zap.Logger, options ...Option) *Logger {
90 logger := &Logger{
91 delegate: l.Sugar(),
92 levelEnabler: l.Core(),
93 }
94 logger.print = &printer{
95 enab: logger.levelEnabler,
96 level: zapcore.InfoLevel,
97 print: logger.delegate.Info,
98 printf: logger.delegate.Infof,
99 }
100 logger.fatal = &printer{
101 enab: logger.levelEnabler,
102 level: zapcore.FatalLevel,
103 print: logger.delegate.Fatal,
104 printf: logger.delegate.Fatalf,
105 }
106 for _, option := range options {
107 option.apply(logger)
108 }
109 return logger
110 }
111
112
113
114
115
116 type printer struct {
117 enab zapcore.LevelEnabler
118 level zapcore.Level
119 print func(...interface{})
120 printf func(string, ...interface{})
121 }
122
123 func (v *printer) Print(args ...interface{}) {
124 v.print(args...)
125 }
126
127 func (v *printer) Printf(format string, args ...interface{}) {
128 v.printf(format, args...)
129 }
130
131 func (v *printer) Println(args ...interface{}) {
132 if v.enab.Enabled(v.level) {
133 v.print(sprintln(args))
134 }
135 }
136
137
138 type Logger struct {
139 delegate *zap.SugaredLogger
140 levelEnabler zapcore.LevelEnabler
141 print *printer
142 fatal *printer
143
144
145 }
146
147
148
149
150 func (l *Logger) Print(args ...interface{}) {
151 l.print.Print(args...)
152 }
153
154
155
156
157 func (l *Logger) Printf(format string, args ...interface{}) {
158 l.print.Printf(format, args...)
159 }
160
161
162
163
164 func (l *Logger) Println(args ...interface{}) {
165 l.print.Println(args...)
166 }
167
168
169 func (l *Logger) Info(args ...interface{}) {
170 l.delegate.Info(args...)
171 }
172
173
174 func (l *Logger) Infoln(args ...interface{}) {
175 if l.levelEnabler.Enabled(zapcore.InfoLevel) {
176 l.delegate.Info(sprintln(args))
177 }
178 }
179
180
181 func (l *Logger) Infof(format string, args ...interface{}) {
182 l.delegate.Infof(format, args...)
183 }
184
185
186 func (l *Logger) Warning(args ...interface{}) {
187 l.delegate.Warn(args...)
188 }
189
190
191 func (l *Logger) Warningln(args ...interface{}) {
192 if l.levelEnabler.Enabled(zapcore.WarnLevel) {
193 l.delegate.Warn(sprintln(args))
194 }
195 }
196
197
198 func (l *Logger) Warningf(format string, args ...interface{}) {
199 l.delegate.Warnf(format, args...)
200 }
201
202
203 func (l *Logger) Error(args ...interface{}) {
204 l.delegate.Error(args...)
205 }
206
207
208 func (l *Logger) Errorln(args ...interface{}) {
209 if l.levelEnabler.Enabled(zapcore.ErrorLevel) {
210 l.delegate.Error(sprintln(args))
211 }
212 }
213
214
215 func (l *Logger) Errorf(format string, args ...interface{}) {
216 l.delegate.Errorf(format, args...)
217 }
218
219
220 func (l *Logger) Fatal(args ...interface{}) {
221 l.fatal.Print(args...)
222 }
223
224
225 func (l *Logger) Fatalln(args ...interface{}) {
226 l.fatal.Println(args...)
227 }
228
229
230 func (l *Logger) Fatalf(format string, args ...interface{}) {
231 l.fatal.Printf(format, args...)
232 }
233
234
235 func (l *Logger) V(level int) bool {
236 return l.levelEnabler.Enabled(_grpcToZapLevel[level])
237 }
238
239 func sprintln(args []interface{}) string {
240 s := fmt.Sprintln(args...)
241
242 return s[:len(s)-1]
243 }
244
View as plain text