/
zap.go
81 lines (71 loc) · 2.09 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
package log
import (
"os"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type ZapConfig struct {
LogFile string // 日志文件路径, 不传则不写文件
LogLevel string // debug | info | warn | error
MaxAge int // 保存的天数, 默认不删除
MaxSize int // 单个文件大小 MB
MaxBackups int // 最多保留的备份数
Compress bool // 是否压缩
JsonFormat bool // 是否用 json 格式
}
var (
Logger *zap.Logger
Sugar *zap.SugaredLogger
)
func Init(zConfig ZapConfig) {
var ws zapcore.WriteSyncer
if len(zConfig.LogFile) > 0 {
hook := lumberjack.Logger{
Filename: zConfig.LogFile, // 日志文件路径
MaxSize: zConfig.MaxSize, // megabytes
MaxAge: zConfig.MaxAge,
MaxBackups: zConfig.MaxBackups, // 最多保留300个备份
LocalTime: false,
Compress: zConfig.Compress, // 是否压缩 disabled by default
}
ws = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook))
} else {
ws = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout))
}
cfg := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "line",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写编码器
EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601 UTC 时间格式
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder, // 全路径编码器
EncodeName: zapcore.FullNameEncoder,
}
var enc zapcore.Encoder
if zConfig.JsonFormat {
enc = zapcore.NewJSONEncoder(cfg)
} else {
enc = zapcore.NewConsoleEncoder(cfg)
}
var level zapcore.Level
switch zConfig.LogLevel {
case "debug":
level = zap.DebugLevel
case "info":
level = zap.InfoLevel
case "warn":
level = zap.WarnLevel
case "error":
level = zap.ErrorLevel
default:
level = zap.InfoLevel
}
Logger = zap.New(zapcore.NewCore(enc, ws, level), zap.AddCaller())
Sugar = Logger.Sugar()
}