/
log.go
48 lines (42 loc) · 1.01 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
package log
import (
"os"
"sync"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var doOnce sync.Once
func initLogger(logLevel string, replaceGlobal bool) (*zap.Logger, error) {
level := zapcore.InfoLevel
if err := level.UnmarshalText([]byte(logLevel)); err != nil {
return nil, err
}
writers := []zapcore.WriteSyncer{zapcore.AddSync(os.Stdout)}
encoder := zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
MessageKey: "msg",
NameKey: "name",
EncodeLevel: zapcore.LowercaseColorLevelEncoder,
EncodeTime: zapcore.RFC3339TimeEncoder,
EncodeName: zapcore.FullNameEncoder,
}
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoder),
zapcore.NewMultiWriteSyncer(writers...),
level,
)
l := zap.New(core)
zap.ReplaceGlobals(l)
return l, nil
}
func InitGlobalLogger(logLevel string) error {
var err error
doOnce.Do(func() {
_, err = initLogger(logLevel, true)
})
return err
}
func NewLogger(logLevel string) (*zap.Logger, error) {
return initLogger(logLevel, false)
}