/
zap.go
65 lines (58 loc) · 1.88 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
package core
import (
"fmt"
"log"
"time"
"github.com/natefinch/lumberjack"
"github.com/spf13/viper"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var lg *zap.Logger
// InitZap 初始化Logger
func InitZap() {
//正式环境下日志写入到文件中,测试环境下打印到控制台中
if viper.GetString("appMode") == "release" {
writeSyncer := getLogWriter(getLoggerFileName(),
viper.GetInt("logger.maxSize"),
viper.GetInt("logger.maxBackups"),
viper.GetInt("logger.maxAge"),
viper.GetBool("logger.compress"))
encoder := getEncoder()
var l = new(zapcore.Level)
if err := l.UnmarshalText([]byte("info")); err != nil {
log.Fatalln(err)
}
core := zapcore.NewCore(encoder, writeSyncer, l)
lg = zap.New(core, zap.AddCaller())
} else {
lg, _ = zap.NewProduction()
}
zap.ReplaceGlobals(lg) // 替换zap包中全局的logger实例,后续在其他包中只需使用zap.L()调用即可
}
func getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.TimeKey = "time"
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
return zapcore.NewJSONEncoder(encoderConfig)
}
//getLogWriter 使用Lumberjack进行日志切割归档
func getLogWriter(filename string, maxSize, maxBackup, maxAge int, compress bool) zapcore.WriteSyncer {
lumberJackLogger := &lumberjack.Logger{
Filename: filename,
MaxSize: maxSize,
MaxBackups: maxBackup,
MaxAge: maxAge,
Compress: compress,
}
return zapcore.AddSync(lumberJackLogger)
}
//getLoggerFileName 获取logger日志文件名
func getLoggerFileName() string {
now := time.Now()
dateStr := fmt.Sprintf("./runtime/logs/%02d-%02d-%02d.log", now.Year(), int(now.Month()), now.Day())
return dateStr
}