/
config.go
143 lines (131 loc) · 3.31 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
131
132
133
134
135
136
137
138
139
140
141
142
143
package logging
import (
"github.com/adrg/xdg"
"go.uber.org/zap/zapcore"
"path"
"strings"
"time"
)
type Config struct {
Level string
Development bool
Json bool
FileRotator FileRotatorConfig
}
type FileRotatorConfig struct {
Enabled bool
Level string
Path string
BaseName string
MaxAge time.Duration
MaxSize int
MaxBackups int
BufferSize int
}
func NewDefaultConfig() Config {
return Config{
Level: "info",
Development: false,
Json: false,
FileRotator: FileRotatorConfig{
Enabled: false,
Level: "debug",
Path: path.Join(xdg.DataHome, "bitmagnet", "logs"),
BaseName: "bitmagnet",
MaxAge: time.Minute * 60,
MaxSize: 1_000_000 * 100,
BufferSize: 1_000,
MaxBackups: 5,
},
}
}
const (
timestamp = "timestamp"
severity = "severity"
logger = "logger"
caller = "caller"
message = "message"
stacktrace = "stacktrace"
levelDebug = "DEBUG"
levelInfo = "INFO"
levelWarning = "WARNING"
levelError = "ERROR"
levelCritical = "CRITICAL"
levelAlert = "ALERT"
levelEmergency = "EMERGENCY"
)
var jsonEncoderConfig = zapcore.EncoderConfig{
TimeKey: timestamp,
LevelKey: severity,
NameKey: logger,
CallerKey: caller,
MessageKey: message,
StacktraceKey: stacktrace,
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: levelEncoder(),
EncodeTime: timeEncoder(),
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
var consoleEncoderConfig = zapcore.EncoderConfig{
TimeKey: "",
LevelKey: "L",
NameKey: "N",
CallerKey: "C",
FunctionKey: zapcore.OmitKey,
MessageKey: "M",
StacktraceKey: "S",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// levelToZapLevel converts the given string to the appropriate zap level
// value.
func levelToZapLevel(s string) zapcore.Level {
switch strings.ToUpper(strings.TrimSpace(s)) {
case levelDebug:
return zapcore.DebugLevel
case levelInfo:
return zapcore.InfoLevel
case levelWarning:
return zapcore.WarnLevel
case levelError:
return zapcore.ErrorLevel
case levelCritical:
return zapcore.DPanicLevel
case levelAlert:
return zapcore.PanicLevel
case levelEmergency:
return zapcore.FatalLevel
}
return zapcore.WarnLevel
}
// levelEncoder transforms a zap level to the associated stackdriver level.
func levelEncoder() zapcore.LevelEncoder {
return func(l zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
switch l {
case zapcore.DebugLevel:
enc.AppendString(levelDebug)
case zapcore.InfoLevel:
enc.AppendString(levelInfo)
case zapcore.WarnLevel:
enc.AppendString(levelWarning)
case zapcore.ErrorLevel:
enc.AppendString(levelError)
case zapcore.DPanicLevel:
enc.AppendString(levelCritical)
case zapcore.PanicLevel:
enc.AppendString(levelAlert)
case zapcore.FatalLevel:
enc.AppendString(levelEmergency)
}
}
}
// timeEncoder encodes the time as RFC3339 nano.
func timeEncoder() zapcore.TimeEncoder {
return func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format(time.RFC3339Nano))
}
}