/
config.go
130 lines (114 loc) · 3.21 KB
/
config.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
package log
import (
"fmt"
"strconv"
"time"
"github.com/liupzmin/weewoe/util/xcolor"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// Config ...
type Config struct {
// Dir 日志输出目录
Dir string
// Name 日志文件名称
Name string
// Level 日志初始等级
Level string
// 日志初始化字段
Fields []zap.Field
// 是否添加调用者信息
AddCaller bool
// 日志前缀
Prefix string
// 日志输出文件最大长度,超过改值则截断
MaxSize int
MaxAge int
MaxBackup int
// 日志磁盘刷盘间隔
Interval time.Duration
CallerSkip int
// 异步
Async bool
asyncCloser func() error
Queue bool
QueueSleep time.Duration
Core zapcore.Core
EnableConsole bool
EncoderConfig *zapcore.EncoderConfig
configKey string
// 是否启用可读时间
EnableTimeLayout bool
}
// Filename ...
func (config *Config) Filename() string {
return fmt.Sprintf("%s/%s", config.Dir, config.Name)
}
// DefaultZapEncoderConfig ...
func DefaultZapEncoderConfig() *zapcore.EncoderConfig {
return &zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "lv",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stack",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: timeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: ShortCallerEncoder,
}
}
func NewLogger(config *Config) *Logger {
if config.EncoderConfig == nil {
config.EncoderConfig = DefaultZapEncoderConfig()
}
if config.EnableConsole {
config.EncoderConfig.EncodeLevel = DebugEncodeLevel
config.EncoderConfig.EncodeCaller = ShortCallerEncoderColor
}
var (
c int8 = 0
t int8 = 0
)
if config.EnableConsole {
c = 1
}
if config.EnableTimeLayout {
t = 1
}
switch c<<1 + t {
case 0:
config.EncoderConfig.EncodeTime = TimeEncoder
case 1:
config.EncoderConfig.EncodeTime = TimeLayoutEncoder
case 2:
config.EncoderConfig.EncodeTime = TimeEncoderColor
case 3:
config.EncoderConfig.EncodeTime = TimeLayoutEncoderColor
}
return newLogger(config)
}
// ShortCallerEncoder serializes a caller in package/file:line format, trimming
// all but the final directory from the full path.
func ShortCallerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
// TODO: consider using a byte-oriented API to save an allocation.
enc.AppendString(fmt.Sprintf("%-32s", caller.TrimmedPath()))
}
func ShortCallerEncoderColor(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
// TODO: consider using a byte-oriented API to save an allocation.
enc.AppendString(xcolor.Blue(fmt.Sprintf("%-32s", caller.TrimmedPath())))
}
func TimeLayoutEncoderColor(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(xcolor.Yellow(t.Format("2006-01-02 15:04:05.000")))
}
func TimeLayoutEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
}
func TimeEncoderColor(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(xcolor.Yellow(strconv.FormatInt(t.Unix(), 10)))
}
func TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendInt64(t.Unix())
}