-
Notifications
You must be signed in to change notification settings - Fork 3
/
zap.go
95 lines (84 loc) · 2.34 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package log
import (
"encoding/json"
"github.com/WeBankPartners/wecube-plugins-capacity/server/models"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
"strings"
"time"
)
var (
Logger *zap.Logger
AccessLogger *zap.Logger
levelStringList = []string{"debug","info","warn","error"}
)
func InitLogger() {
Logger = InitArchiveZapLogger(models.Config().Log.File)
AccessLogger = InitArchiveZapLogger(models.Config().Log.AccessFile)
}
func InitArchiveZapLogger(logFile string) *zap.Logger {
logLevel := strings.ToLower(models.Config().Log.Level)
var level int
for i,v := range levelStringList {
if v == logLevel {
level = i-1
break
}
}
zapLevel := zap.NewAtomicLevel()
zapLevel.SetLevel(zapcore.Level(level))
hook := lumberjack.Logger{
Filename: logFile,
MaxSize: models.Config().Log.ArchiveMaxSize,
MaxBackups: models.Config().Log.ArchiveMaxBackup,
MaxAge: models.Config().Log.ArchiveMaxDay,
Compress: models.Config().Log.Compress,
}
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05"))
},
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
core := zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout),zapcore.AddSync(&hook)), zapLevel)
logger := zap.New(core, zap.AddCaller(), zap.Development())
logger.Info("success init zap log !!")
return logger
}
func Error(err error) zap.Field {
return zap.Error(err)
}
func String(k,v string) zap.Field {
return zap.String(k, v)
}
func Int(k string,v int) zap.Field {
return zap.Int(k, v)
}
func Int64(k string,v int64) zap.Field {
return zap.Int64(k, v)
}
func Float64(k string,v float64) zap.Field {
return zap.Float64(k, v)
}
func JsonObj(k string,v interface{}) zap.Field {
b,err := json.Marshal(v)
if err == nil {
return zap.String(k, string(b))
}else{
return zap.Error(err)
}
}
func StringList(k string,v []string) zap.Field {
return zap.Strings(k, v)
}