/
options.go
57 lines (50 loc) · 1.29 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
package cloudlog
// Option gives functions changed loggerOptions member.
// It uses Functional Option Pattern.
type Option func(*loggerOptions)
type loggerOptions struct {
needErrorReporting bool
serviceName string
logLevel string
}
const (
defaultNeedErrorReporting = false
defaultServiceName = "golang-app"
defaultLogLevel = "debug"
)
// NeedErrorReporting can assign needErrorReporting.
func NeedErrorReporting(needErrorReporting bool) Option {
return func(lo *loggerOptions) {
lo.needErrorReporting = needErrorReporting
}
}
// ServiceName can assign serviceName.
func ServiceName(serviceName string) Option {
return func(lo *loggerOptions) {
lo.serviceName = serviceName
}
}
// LogLevel can assign logLevel.
func LogLevel(logLevel string) Option {
return func(lo *loggerOptions) {
lo.logLevel = logLevel
}
}
func getOptions(options []Option) (
needErrorReporting bool,
serviceName string,
logLevel string,
) {
loggerOps := &loggerOptions{
needErrorReporting: defaultNeedErrorReporting,
serviceName: defaultServiceName,
logLevel: defaultLogLevel,
}
for _, option := range options {
option(loggerOps)
}
needErrorReporting = loggerOps.needErrorReporting
serviceName = loggerOps.serviceName
logLevel = loggerOps.logLevel
return
}