/
log.go
101 lines (85 loc) · 2.43 KB
/
log.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
package logger
import (
"encoding/json"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// Log is a package level variable, access logging function through "Log"
var Log Logger
// Logger represent common interface for logging function
type Logger interface {
Errorf(format string, args ...interface{})
Error(args ...interface{})
Fatalf(format string, args ...interface{})
Fatal(args ...interface{})
Infof(format string, args ...interface{})
Info(args ...interface{})
Warnf(format string, args ...interface{})
Debugf(format string, args ...interface{})
Debug(args ...interface{})
}
// loggerWrapper is the wrapper around the logging library, in this case, zap logger
type loggerWrapper struct {
lw *zap.SugaredLogger
}
func InitLogger(config []byte) {
Log = newLogger(config)
}
func newLogger(config []byte) Logger {
// Use a default logging config if one is not supplied
if config == nil {
config = []byte(`{
"level": "debug",
"encoding": "json",
"outputPaths": ["stdout", "/tmp/logs"],
"errorOutputPaths": ["stderr"],
"initialFields": {"foo": "bar"},
"encoderConfig": {
"messageKey": "msg",
"levelKey": "level",
"levelEncoder": "lowercase",
"callerKey": "caller"
}
}`)
}
var cfg zap.Config
if err := json.Unmarshal(config, &cfg); err != nil {
panic(err)
}
cfg.EncoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
logger, err := cfg.Build()
if err != nil {
panic(err)
}
defer logger.Sync()
logger.Info("logger construction succeeded")
return logger.Sugar()
}
// These are the supported logging methods
func (logger *loggerWrapper) Errorf(format string, args ...interface{}) {
logger.lw.Errorf(format, args)
}
func (logger *loggerWrapper) Error(args ...interface{}) {
logger.lw.Error(args)
}
func (logger *loggerWrapper) Fatalf(format string, args ...interface{}) {
logger.lw.Fatalf(format, args)
}
func (logger *loggerWrapper) Fatal(args ...interface{}) {
logger.lw.Fatal(args)
}
func (logger *loggerWrapper) Infof(format string, args ...interface{}) {
logger.lw.Infof(format, args)
}
func (logger *loggerWrapper) Warnf(format string, args ...interface{}) {
logger.lw.Warnf(format, args)
}
func (logger *loggerWrapper) Debugf(format string, args ...interface{}) {
logger.lw.Debugf(format, args)
}
func (logger *loggerWrapper) Printf(format string, args ...interface{}) {
logger.lw.Infof(format, args)
}
func (logger *loggerWrapper) Println(args ...interface{}) {
logger.lw.Info(args, "\n")
}