/
logger.go
136 lines (117 loc) · 3.26 KB
/
logger.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package gins
import (
"github.com/AbnerEarl/goutils/times"
"os"
"path/filepath"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
func InitLog(logDir, logfileName string) {
l := &Log{
LogDir: logDir,
LogFileName: logfileName,
LogMinLevel: zap.InfoLevel,
LogMaxSize: 1,
MaxBackups: 3,
}
core := InitLogger(l)
logger := zap.New(core)
zap.ReplaceGlobals(logger)
}
type Log struct {
LogDir string
LogFileName string
Stdout bool
LogMaxSize int
LogMaxAge int
MaxBackups int
LogCompress bool
LocalTime bool
EnableColor bool
JsonFormat bool
LogMinLevel zapcore.Level
}
func InitLogger(l *Log) zapcore.Core {
opts := []zapcore.WriteSyncer{
zapcore.AddSync(&lumberjack.Logger{
Filename: filepath.Join(l.LogDir, l.LogFileName), // ⽇志⽂件路径
MaxSize: l.LogMaxSize, // 单位为MB,默认为512MB
MaxAge: l.LogMaxAge, // 文件最多保存多少天
LocalTime: l.LocalTime, // 采用本地时间
Compress: l.LogCompress, // 是否压缩日志
MaxBackups: l.MaxBackups, // 最多保存多少分
}),
}
if l.Stdout {
opts = append(opts, zapcore.AddSync(os.Stdout))
}
syncWriter := zapcore.NewMultiWriteSyncer(opts...)
// 自定义时间输出格式
customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString("[" + t.Format(times.TmFmtWithMS1) + "]")
}
// 自定义日志级别显示
customLevelEncoder := func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString("[" + level.CapitalString() + "]")
}
// 自定义文件:行号输出项
customCallerEncoder := func(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString("[" + caller.TrimmedPath() + "]")
}
encoderConf := zapcore.EncoderConfig{
CallerKey: "caller_line", // 打印文件名和行数
LevelKey: "level_name",
MessageKey: "msg",
TimeKey: "ts",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeTime: customTimeEncoder, // 自定义时间格式
EncodeLevel: customLevelEncoder, // 小写编码器
EncodeCaller: customCallerEncoder, // 全路径编码器
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeName: zapcore.FullNameEncoder,
}
// level大写染色编码器
if l.EnableColor {
encoderConf.EncodeLevel = zapcore.CapitalColorLevelEncoder
}
// json 格式化处理
if l.JsonFormat {
return zapcore.NewCore(zapcore.NewJSONEncoder(encoderConf),
syncWriter, zap.NewAtomicLevelAt(l.LogMinLevel))
}
return zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConf),
syncWriter, zap.NewAtomicLevelAt(l.LogMinLevel))
}
func LogError(msg ...string) {
for _, s := range msg {
zap.L().Error(s)
}
}
func LogInfo(msg ...string) {
for _, s := range msg {
zap.L().Info(s)
}
}
func LogPanic(msg ...string) {
for _, s := range msg {
zap.L().Panic(s)
}
}
func LogDebug(msg ...string) {
for _, s := range msg {
zap.L().Debug(s)
}
}
func LogWarn(msg ...string) {
for _, s := range msg {
zap.L().Warn(s)
}
}
func LogFatal(msg ...string) {
for _, s := range msg {
zap.L().Fatal(s)
}
}