-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
131 lines (112 loc) · 2.17 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
package tlog
import (
"encoding/json"
)
type Options struct {
// for json/text
omitEmpty bool
format int
timeFormat int
level int
writer Writer
// for output file
logDir string
logFilePrefix string
fileStoreMode FileStoreModeT
anyMarshalFunc AnyMarshalFuncT
// for simple post
postUrl string
}
type Option func(*Options)
func setOptions(optL ...Option) *Options {
opts := &Options{
omitEmpty: true,
format: FormatJson,
level: AllLevel,
writer: NewWriteToConsole(),
timeFormat: HumanReadableTimeMs,
logDir: "logs",
logFilePrefix: "tlog",
fileStoreMode: DailySplit,
anyMarshalFunc: json.Marshal,
}
for _, opt := range optL {
opt(opts)
}
return opts
}
// If you don't want to output anything, you can use io.Discard
func SetWriter(w Writer) Option {
return func(o *Options) {
if w == nil {
panic("tlog:SetWriter param is illegal")
}
o.writer = w
}
}
// Set prefix `time` format
func TimeFormat(v int) Option {
if v < 1 {
panic("tlog:TimeFormat param is illegal")
}
return func(o *Options) {
o.timeFormat = v
}
}
// json/text
func Format(v int) Option {
if v != FormatJson && v != FormatText {
panic("tlog:Format param is illegal")
}
return func(o *Options) {
o.format = v
}
}
// for json:string,array
func OmitEmpty(v bool) Option {
return func(o *Options) {
o.omitEmpty = v
}
}
// for output file
func LogDir(v string) Option {
if len(v) == 0 {
panic("tlog:LogDir param is illegal")
}
return func(o *Options) {
o.logDir = v
}
}
func LogFilePrefix(v string) Option {
if len(v) == 0 {
panic("tlog:LogFilePrefix param is illegal")
}
return func(o *Options) {
o.logFilePrefix = v
}
}
func FileStoreMode(v FileStoreModeT) Option {
if v < 1 {
panic("tlog:FileStoreMode param is illegal")
}
return func(o *Options) {
o.fileStoreMode = v
}
}
// for simple post
func PostUrl(v string) Option {
if len(v) == 0 {
panic("tlog:PostUrl param is illegal")
}
return func(o *Options) {
o.postUrl = v
}
}
func AnyMarshalFunc(f AnyMarshalFuncT) Option {
if f == nil {
panic("tlog:AnyMarshalFuncT param is illegal")
}
return func(o *Options) {
o.anyMarshalFunc = f
}
}