/
logging.go
70 lines (60 loc) · 2.2 KB
/
logging.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
package common
import (
"github.com/op/go-logging"
"os"
)
// SetupLogging - verbosity 0=error, 1=info, 2=debug
func SetupLogging(verbosity int) {
errBackend := logging.NewLogBackend(os.Stderr, "", 0)
errFormat := logging.MustStringFormatter(
`%{color}%{shortfunc} ▶ %{level:.5s} %{color:reset} %{message}`,
)
errFormatter := logging.NewBackendFormatter(errBackend, errFormat)
errLeveled := logging.AddModuleLevel(errFormatter)
errLeveled.SetLevel(logging.ERROR, "")
warnFormat := logging.MustStringFormatter(
`%{color}%{message}%{color:reset}`,
)
warnFormatter := logging.NewBackendFormatter(errBackend, warnFormat)
warnLeveled := logging.AddModuleLevel(notToExceedLevel(logging.WARNING, warnFormatter))
warnLeveled.SetLevel(logging.WARNING, "")
if verbosity >= 1 {
infoBackend := logging.NewLogBackend(os.Stdout, "", 0)
infoFormat := logging.MustStringFormatter(
`%{color}%{message}%{color:reset}`,
)
infoFormatter := logging.NewBackendFormatter(infoBackend, infoFormat)
infoLeveled := logging.AddModuleLevel(notToExceedLevel(logging.NOTICE, infoFormatter))
infoLeveled.SetLevel(logging.INFO, "")
if verbosity >= 2 {
debugBackend := logging.NewLogBackend(os.Stdout, "", 0)
debugFormat := logging.MustStringFormatter(
`%{color}%{time:15:04:05.000} %{module} ▶ %{id:03x}%{color:reset} %{message}`,
)
debugFormatter := logging.NewBackendFormatter(debugBackend, debugFormat)
debugLeveled := logging.AddModuleLevel(notToExceedLevel(logging.DEBUG, debugFormatter))
debugLeveled.SetLevel(logging.DEBUG, "")
logging.SetBackend(debugLeveled, infoLeveled, warnLeveled, errLeveled)
} else {
logging.SetBackend(infoLeveled, warnLeveled, errLeveled)
}
} else {
logging.SetBackend(warnLeveled, errLeveled)
}
}
func notToExceedLevel(notToExceed logging.Level, delegate logging.Backend) logging.Backend {
return ¬ToExceedLevelBackend{
delegate: delegate,
notToExceedLevel: notToExceed,
}
}
type notToExceedLevelBackend struct {
delegate logging.Backend
notToExceedLevel logging.Level
}
func (b *notToExceedLevelBackend) Log(l logging.Level, i int, r *logging.Record) error {
if l < b.notToExceedLevel {
return nil
}
return b.delegate.Log(l, i, r)
}