-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
zap.go
74 lines (61 loc) · 1.29 KB
/
zap.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
package zap
import (
"fmt"
"go.uber.org/zap"
"github.com/go-kratos/kratos/v2/log"
)
var _ log.Logger = (*Logger)(nil)
type Logger struct {
log *zap.Logger
msgKey string
}
type Option func(*Logger)
// WithMessageKey with message key.
func WithMessageKey(key string) Option {
return func(l *Logger) {
l.msgKey = key
}
}
func NewLogger(zlog *zap.Logger) *Logger {
return &Logger{
log: zlog,
msgKey: log.DefaultMessageKey,
}
}
func (l *Logger) Log(level log.Level, keyvals ...interface{}) error {
var (
msg = ""
keylen = len(keyvals)
)
if keylen == 0 || keylen%2 != 0 {
l.log.Warn(fmt.Sprint("Keyvalues must appear in pairs: ", keyvals))
return nil
}
data := make([]zap.Field, 0, (keylen/2)+1)
for i := 0; i < keylen; i += 2 {
if keyvals[i].(string) == l.msgKey {
msg, _ = keyvals[i+1].(string)
continue
}
data = append(data, zap.Any(fmt.Sprint(keyvals[i]), keyvals[i+1]))
}
switch level {
case log.LevelDebug:
l.log.Debug(msg, data...)
case log.LevelInfo:
l.log.Info(msg, data...)
case log.LevelWarn:
l.log.Warn(msg, data...)
case log.LevelError:
l.log.Error(msg, data...)
case log.LevelFatal:
l.log.Fatal(msg, data...)
}
return nil
}
func (l *Logger) Sync() error {
return l.log.Sync()
}
func (l *Logger) Close() error {
return l.Sync()
}