-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
157 lines (125 loc) · 5.6 KB
/
options.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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package log
import (
"encoding/json"
"errors"
"github.com/spf13/pflag"
)
// Options Configuration for logging.
type Options struct {
// DisableConsole whether to log to console
DisableConsole bool `json:"disable-console" mapstructure:"disable-console"`
// DisableConsoleColor force disabling colors.
DisableConsoleColor bool `json:"disable-console-color" mapstructure:"disable-console-color"`
// DisableConsoleTime whether to add a time
DisableConsoleTime bool `json:"disable-console-time" mapstructure:"disable-console-time"`
// DisableConsoleLevel whether to add a level
DisableConsoleLevel bool `json:"disable-console-level" mapstructure:"disable-console-level"`
// DisableConsoleCaller whether to log caller info
DisableConsoleCaller bool `json:"disable-console-caller" mapstructure:"disable-console-caller"`
// DisableFile whether to log to file
DisableFile bool `json:"disable-file" mapstructure:"disable-file"`
// DisableFileJson whether to enable json format for log file
//nolint:revive
DisableFileJson bool `json:"disable-file-json" mapstructure:"disable-file-json"`
// DisableFileTime whether to add a time
DisableFileTime bool `json:"disable-file-time" mapstructure:"disable-file-time"`
// DisableFileCaller whether to log caller info
DisableFileCaller bool `json:"disable-file-caller" mapstructure:"disable-file-caller"`
// DisableRotate whether to enable log file rotate
DisableRotate bool `json:"disable-rotate" mapstructure:"disable-rotate"`
// MaxSize the max size in MB of the logfile before it's rolled
MaxSize int `json:"max-size" mapstructure:"max-size"`
// MaxBackups the max number of rolled files to keep
MaxBackups int `json:"max-backups" mapstructure:"max-backups"`
// MaxAge the max age in days to keep a logfile
MaxAge int `json:"max-age" mapstructure:"max-age"`
// CallerSkip increases the number of callers skipped by caller annotation
CallerSkip int `json:"caller-skip" mapstructure:"caller-skip"`
// ConsoleLevel sets the standard logger level
ConsoleLevel string `json:"console-level" mapstructure:"console-level"`
// FileLevel sets the file logger level.
FileLevel string `json:"file-level" mapstructure:"file-level"`
// Output directory for logging when DisableFile is false
Output string `json:"output" mapstructure:"output"`
// FilenameEncoder is used to set the log filename encoder.
FilenameEncoder FilenameEncoder `json:"-" mapstructure:"-"`
// TimeEncoder is used to set the log time encoder.
TimeEncoder TimeEncoder `json:"-" mapstructure:"-"`
// LevelEncoder is used to set the log level encoder.
LevelEncoder LevelEncoder `json:"-" mapstructure:"-"`
// CallerEncoder is used to set the log caller encoder.
CallerEncoder CallerEncoder `json:"-" mapstructure:"-"`
}
// NewOptions creates an Options with default parameters.
func NewOptions() *Options {
return &Options{
DisableFile: true,
DisableRotate: true,
DisableConsoleCaller: true,
DisableFileCaller: true,
ConsoleLevel: InfoLevel.String(),
CallerSkip: DefaultCallerSkip,
}
}
// AddFlags adds flags related to logger to the specified FlagSet.
func (o *Options) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&o.ConsoleLevel, "log.console-level", o.ConsoleLevel,
"Sets the standard logger level.")
fs.StringVar(&o.FileLevel, "log.file-level", o.FileLevel,
"Sets the file logger level.")
fs.BoolVar(&o.DisableConsole, "log.disable-console", o.DisableConsole,
"Whether to log to console.")
fs.BoolVar(&o.DisableConsoleColor, "log.disable-console-color", o.DisableConsoleColor,
"Force disabling colors.")
fs.BoolVar(&o.DisableConsoleTime, "log.disable-console-time", o.DisableConsoleTime,
"Whether to add a time.")
fs.BoolVar(&o.DisableConsoleLevel, "log.disable-console-level", o.DisableConsoleLevel,
"Whether to add a level.")
fs.BoolVar(&o.DisableConsoleCaller, "log.disable-console-caller", o.DisableConsoleCaller,
"Whether to add caller info.")
fs.BoolVar(&o.DisableFile, "log.disable-file", o.DisableFile,
"Whether to log to file.")
fs.BoolVar(&o.DisableFileJson, "log.disable-file-json", o.DisableFileJson,
"Whether to enable json format for log file.")
fs.BoolVar(&o.DisableFileTime, "log.disable-file-time", o.DisableFileTime,
"Whether to add a time.")
fs.BoolVar(&o.DisableFileCaller, "log.disable-file-caller", o.DisableFileCaller,
"Whether to add caller info.")
fs.BoolVar(&o.DisableRotate, "log.disable-rotate", o.DisableRotate,
"Whether to enable log file rotate.")
fs.IntVar(&o.MaxSize, "log.max-size", o.MaxSize,
"Sets the max size in MB of the logfile before it's rolled.")
fs.IntVar(&o.MaxBackups, "log.max-backups", o.MaxBackups,
"Sets the max number of rolled files to keep.")
fs.IntVar(&o.MaxAge, "log.max-age", o.MaxAge,
"Sets the max age in days to keep a logfile.")
fs.StringVar(&o.Output, "log.output", o.Output,
"Sets the directory for logging when DisableFile is false.")
}
// Validate validates the options fields.
func (o *Options) Validate() []error {
var errs []error
var level Level
if o.ConsoleLevel != "" {
if err := level.UnmarshalText([]byte(o.ConsoleLevel)); err != nil {
errs = append(errs, err)
}
}
if o.FileLevel != "" {
if err := level.UnmarshalText([]byte(o.FileLevel)); err != nil {
errs = append(errs, err)
}
}
if o.DisableConsole && o.DisableFile {
errs = append(errs, errors.New("no enabled logger, one or more of "+
"(DisableConsole, DisableFile) must be set to false"))
}
if !o.DisableFile && o.Output == "" {
errs = append(errs, errors.New("no log output, 'Output' must be set"))
}
return errs
}
func (o *Options) String() string {
data, _ := json.Marshal(o)
return string(data)
}