-
Notifications
You must be signed in to change notification settings - Fork 289
/
field.go
65 lines (54 loc) · 953 Bytes
/
field.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
package logger
import (
"fmt"
"time"
)
type Field interface {
Key() string
String() string
}
type Fields []Field
func (f *Fields) Add(fields ...Field) {
*f = append(*f, fields...)
}
func (f *Fields) Get(key string) []Field {
fields := []Field{}
for _, field := range *f {
if field.Key() == key {
fields = append(fields, field)
}
}
return fields
}
type GenericField struct {
key string
value any
format string
}
func (f GenericField) Key() string {
return f.key
}
func (f GenericField) String() string {
return fmt.Sprintf(f.format, f.value)
}
func StringField(key, value string) Field {
return GenericField{
key: key,
value: value,
format: "%s",
}
}
func IntField(key string, value int) Field {
return GenericField{
key: key,
value: value,
format: "%d",
}
}
func DurationField(key string, value time.Duration) Field {
return GenericField{
key: key,
value: value,
format: "%v",
}
}