1
1
package logUtils
2
2
3
3
import (
4
- "reflect"
5
-
6
4
"github.com/natefinch/lumberjack"
5
+ "github.com/reggiepy/LogBeetle/goutils/arrayUtils"
7
6
"go.uber.org/zap"
8
7
"go.uber.org/zap/zapcore"
9
8
)
10
9
11
- var Logger * zap.Logger
12
-
13
10
type Config struct {
14
11
LogFile string `json:"LogFile" yaml:"LogFile"` // 日志文件名
15
12
MaxSize int `json:"MaxSize" yaml:"MaxSize"` // 日志文件大小限制,单位为 MB
@@ -20,64 +17,6 @@ type Config struct {
20
17
LogFormat string `json:"LogFormat" yaml:"LogFormat"` // 日志等级
21
18
}
22
19
23
- type ConfigOption func (loggerConfig * Config ) error
24
-
25
- // WithLogFile 设置日志文件名
26
- func WithLogFile (logFile string ) ConfigOption {
27
- return func (loggerConfig * Config ) error {
28
- loggerConfig .LogFile = logFile
29
- return nil
30
- }
31
- }
32
-
33
- // WithMaxSize 设置日志文件大小限制,单位为 MB
34
- func WithMaxSize (maxSize int ) ConfigOption {
35
- return func (loggerConfig * Config ) error {
36
- loggerConfig .MaxSize = maxSize
37
- return nil
38
- }
39
- }
40
-
41
- // WithMaxBackups 设置最大保留的旧日志文件数量
42
- func WithMaxBackups (maxBackups int ) ConfigOption {
43
- return func (loggerConfig * Config ) error {
44
- loggerConfig .MaxBackups = maxBackups
45
- return nil
46
- }
47
- }
48
-
49
- // WithMaxAge 设置旧日志文件保留天数
50
- func WithMaxAge (maxAge int ) ConfigOption {
51
- return func (loggerConfig * Config ) error {
52
- loggerConfig .MaxAge = maxAge
53
- return nil
54
- }
55
- }
56
-
57
- // WithCompress 设置是否压缩旧日志文件
58
- func WithCompress (compress bool ) ConfigOption {
59
- return func (loggerConfig * Config ) error {
60
- loggerConfig .Compress = compress
61
- return nil
62
- }
63
- }
64
-
65
- // WithLogLevel 设置日志等级
66
- func WithLogLevel (logLevel string ) ConfigOption {
67
- return func (loggerConfig * Config ) error {
68
- loggerConfig .LogLevel = logLevel
69
- return nil
70
- }
71
- }
72
-
73
- // WithLogFormat 设置日志格式
74
- func WithLogFormat (logFormat string ) ConfigOption {
75
- return func (loggerConfig * Config ) error {
76
- loggerConfig .LogFormat = logFormat
77
- return nil
78
- }
79
- }
80
-
81
20
// NewDefaultConfig 创建默认配置
82
21
func NewDefaultConfig () * Config {
83
22
return & Config {
@@ -91,62 +30,49 @@ func NewDefaultConfig() *Config {
91
30
}
92
31
}
93
32
94
- // InitLogger 初始化Logger
95
- func InitLogger (logConfig Config , options ... ConfigOption ) error {
96
- if reflect .DeepEqual (logConfig , Config {}) {
97
- logConfig = * NewDefaultConfig ()
98
- }
99
- for _ , option := range options {
100
- err := option (& logConfig )
101
- if err != nil {
102
- return err
103
- }
104
- }
105
- logLevel := map [string ]zapcore.Level {
106
- "debug" : zapcore .DebugLevel ,
107
- "info" : zapcore .InfoLevel ,
108
- "warn" : zapcore .WarnLevel ,
109
- "error" : zapcore .ErrorLevel ,
33
+ // NewLogger 初始化Logger
34
+ func (c * Config ) NewLogger (opts ... Option ) (* zap.Logger , error ) {
35
+ var (
36
+ logger * zap.Logger
37
+ logFormats = arrayUtils .NewSet ("json" , "logfmt" )
38
+ )
39
+ for _ , opt := range opts {
40
+ opt .apply (c )
110
41
}
111
42
112
43
lumberJackLogger := & lumberjack.Logger {
113
- Filename : logConfig .LogFile ,
114
- MaxSize : logConfig .MaxSize ,
115
- MaxBackups : logConfig .MaxBackups ,
116
- MaxAge : logConfig .MaxAge ,
117
- Compress : logConfig .Compress ,
44
+ Filename : c .LogFile ,
45
+ MaxSize : c .MaxSize ,
46
+ MaxBackups : c .MaxBackups ,
47
+ MaxAge : c .MaxAge ,
48
+ Compress : c .Compress ,
118
49
}
119
50
writeSyncer := zapcore .AddSync (lumberJackLogger )
120
51
121
- logFormats := []string {"json" , "logfmt" }
122
52
logFormat := "json"
123
- for _ , format := range logFormats {
124
- if format == logConfig .LogFormat {
125
- logFormat = format
126
- }
53
+ for logFormats .Has (c .LogFormat ) {
54
+ logFormat = c .LogFormat
127
55
}
128
- encoder := getEncoder (logFormat )
129
- l , ok := logLevel [logConfig .LogLevel ] // 日志打印级别
130
- if ! ok {
131
- l = logLevel ["info" ]
56
+ encoder := NewEncoder (logFormat )
57
+
58
+ // 日志打印级别
59
+ l , err := zapcore .ParseLevel (c .LogLevel )
60
+ if err != nil {
61
+ l = zapcore .InfoLevel
132
62
}
133
- //l, err := zapcore.ParseLevel(logConfig.LogLevel)
134
- //if err != nil {
135
- // l = zapcore.InfoLevel
136
- //}
137
63
core := zapcore .NewCore (encoder , writeSyncer , l )
138
64
139
- Logger = zap .New (core , zap .AddCaller ()) // zap.Addcaller() 输出日志打印文件和行数如: logger/logger_test.go:33
65
+ logger = zap .New (core , zap .AddCaller ()) // zap.Addcaller() 输出日志打印文件和行数如: logger/logger_test.go:33
140
66
// 1. zap.ReplaceGlobals 函数将当前初始化的 logger 替换到全局的 logger,
141
67
// 2. 使用 logger 的时候 直接通过 zap.S().Debugf("xxx") or zap.L().Debug("xxx")
142
68
// 3. 使用 zap.S() 和 zap.L() 提供全局锁,保证一个全局的安全访问logger的方式
143
- zap .ReplaceGlobals (Logger ) // 替换zap包中全局的logger实例,后续在其他包中只需使用zap.L()调用即可
69
+ // zap.ReplaceGlobals(logger ) // 替换zap包中全局的logger实例,后续在其他包中只需使用zap.L()调用即可
144
70
// zap.L().Debug("")
145
71
// zap.S().Debugf("")
146
- return nil
72
+ return logger , nil
147
73
}
148
74
149
- func getEncoder (logFormat string ) zapcore.Encoder {
75
+ func NewEncoder (logFormat string ) zapcore.Encoder {
150
76
encoderConfig := zap .NewProductionEncoderConfig ()
151
77
encoderConfig .EncodeTime = zapcore .ISO8601TimeEncoder
152
78
encoderConfig .TimeKey = "time"
0 commit comments