mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-17 02:25:14 +00:00
lib/logger: Split STTRACE into list of strings (#9402)
Currently `IsTraced("xyz")` will return true for any inclusion of "xyz" in string. This change splits `STTRACE` using `','`, `' '` and `';'` as delimiters. That makes facilities separation more clear.
This commit is contained in:
parent
f2f5786b33
commit
9f6d732587
@ -15,6 +15,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/exp/slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This package uses stdlib sync as it may be used to debug syncthing/lib/sync
|
// This package uses stdlib sync as it may be used to debug syncthing/lib/sync
|
||||||
@ -63,7 +65,7 @@ type logger struct {
|
|||||||
handlers [NumLevels][]MessageHandler
|
handlers [NumLevels][]MessageHandler
|
||||||
facilities map[string]string // facility name => description
|
facilities map[string]string // facility name => description
|
||||||
debug map[string]struct{} // only facility names with debugging enabled
|
debug map[string]struct{} // only facility names with debugging enabled
|
||||||
traces string
|
traces []string
|
||||||
mut sync.Mutex
|
mut sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,9 +82,21 @@ func New() Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newLogger(w io.Writer) Logger {
|
func newLogger(w io.Writer) Logger {
|
||||||
|
traces := strings.FieldsFunc(os.Getenv("STTRACE"), func(r rune) bool {
|
||||||
|
return strings.ContainsRune(",; ", r)
|
||||||
|
})
|
||||||
|
|
||||||
|
if len(traces) > 0 {
|
||||||
|
if slices.Contains(traces, "all") {
|
||||||
|
traces = []string{"all"}
|
||||||
|
} else {
|
||||||
|
slices.Sort(traces)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return &logger{
|
return &logger{
|
||||||
logger: log.New(w, "", DefaultFlags),
|
logger: log.New(w, "", DefaultFlags),
|
||||||
traces: os.Getenv("STTRACE"),
|
traces: traces,
|
||||||
facilities: make(map[string]string),
|
facilities: make(map[string]string),
|
||||||
debug: make(map[string]struct{}),
|
debug: make(map[string]struct{}),
|
||||||
}
|
}
|
||||||
@ -217,7 +231,16 @@ func (l *logger) SetDebug(facility string, enabled bool) {
|
|||||||
|
|
||||||
// IsTraced returns whether the facility name is contained in STTRACE.
|
// IsTraced returns whether the facility name is contained in STTRACE.
|
||||||
func (l *logger) IsTraced(facility string) bool {
|
func (l *logger) IsTraced(facility string) bool {
|
||||||
return strings.Contains(l.traces, facility) || l.traces == "all"
|
if len(l.traces) > 0 {
|
||||||
|
if l.traces[0] == "all" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
_, found := slices.BinarySearch(l.traces, facility)
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// FacilityDebugging returns the set of facilities that have debugging
|
// FacilityDebugging returns the set of facilities that have debugging
|
||||||
|
Loading…
Reference in New Issue
Block a user