-
Notifications
You must be signed in to change notification settings - Fork 4
/
formatters.go
71 lines (57 loc) · 1.71 KB
/
formatters.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
package logging
import (
"sort"
"strings"
"sync"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
// CreateFormatter is a factory for creating formatters configured through viper
type CreateFormatter func(*viper.Viper) logrus.Formatter
var (
knownFormatters map[string]CreateFormatter
formattersLock *sync.Mutex
// DefaultFormatter the fallback formatter when no registered one matches
DefaultFormatter CreateFormatter
)
func init() {
formattersLock = new(sync.Mutex)
formattersLock.Lock()
DefaultFormatter = func(c *viper.Viper) logrus.Formatter {
return &logrus.TextFormatter{}
}
knownFormatters = make(map[string]CreateFormatter, 10)
knownFormatters["json"] = func(c *viper.Viper) logrus.Formatter {
return &logrus.JSONFormatter{}
}
knownFormatters["text"] = func(c *viper.Viper) logrus.Formatter {
return &logrus.TextFormatter{}
}
formattersLock.Unlock()
}
func parseFormatter(fmtr string, v *viper.Viper) logrus.Formatter {
formattersLock.Lock()
defer formattersLock.Unlock()
if create, ok := knownFormatters[strings.ToLower(fmtr)]; ok {
return create(v)
}
logrus.Debugf("unknown formatter %q, falling back to default", fmtr)
return DefaultFormatter(v)
}
// RegisterFormatter registers a formatter for use in config files
func RegisterFormatter(name string, factory CreateFormatter) {
formattersLock.Lock()
knownFormatters[strings.ToLower(name)] = factory
formattersLock.Unlock()
}
// KnownFormatters returns a list of keys for the currently registered formatters
func KnownFormatters() []string {
formattersLock.Lock()
var formatters []string
for k := range knownFormatters {
formatters = append(formatters, k)
}
sort.Strings(formatters)
formattersLock.Unlock()
return formatters
}