mirror of
https://github.com/octoleo/syncthing.git
synced 2025-01-03 07:12:27 +00:00
This commit is contained in:
parent
7f55fbbe84
commit
406bedf1e3
@ -28,7 +28,10 @@ const (
|
||||
NumLevels
|
||||
)
|
||||
|
||||
const DebugFlags = log.Ltime | log.Ldate | log.Lmicroseconds | log.Lshortfile
|
||||
const (
|
||||
DefaultFlags = log.Ltime
|
||||
DebugFlags = log.Ltime | log.Ldate | log.Lmicroseconds | log.Lshortfile
|
||||
)
|
||||
|
||||
// A MessageHandler is called with the log level and message text.
|
||||
type MessageHandler func(l LogLevel, msg string)
|
||||
@ -57,8 +60,8 @@ type Logger interface {
|
||||
type logger struct {
|
||||
logger *log.Logger
|
||||
handlers [NumLevels][]MessageHandler
|
||||
facilities map[string]string // facility name => description
|
||||
debug map[string]bool // facility name => debugging enabled
|
||||
facilities map[string]string // facility name => description
|
||||
debug map[string]struct{} // only facility names with debugging enabled
|
||||
mut sync.Mutex
|
||||
}
|
||||
|
||||
@ -66,16 +69,17 @@ type logger struct {
|
||||
var DefaultLogger = New()
|
||||
|
||||
func New() Logger {
|
||||
res := &logger{
|
||||
facilities: make(map[string]string),
|
||||
debug: make(map[string]struct{}),
|
||||
}
|
||||
if os.Getenv("LOGGER_DISCARD") != "" {
|
||||
// Hack to completely disable logging, for example when running benchmarks.
|
||||
return &logger{
|
||||
logger: log.New(ioutil.Discard, "", 0),
|
||||
}
|
||||
}
|
||||
|
||||
return &logger{
|
||||
logger: log.New(os.Stdout, "", log.Ltime),
|
||||
res.logger = log.New(ioutil.Discard, "", 0)
|
||||
return res
|
||||
}
|
||||
res.logger = log.New(os.Stdout, "", DefaultFlags)
|
||||
return res
|
||||
}
|
||||
|
||||
// AddHandler registers a new MessageHandler to receive messages with the
|
||||
@ -207,7 +211,7 @@ func (l *logger) Fatalf(format string, vals ...interface{}) {
|
||||
// ShouldDebug returns true if the given facility has debugging enabled.
|
||||
func (l *logger) ShouldDebug(facility string) bool {
|
||||
l.mut.Lock()
|
||||
res := l.debug[facility]
|
||||
_, res := l.debug[facility]
|
||||
l.mut.Unlock()
|
||||
return res
|
||||
}
|
||||
@ -215,20 +219,25 @@ func (l *logger) ShouldDebug(facility string) bool {
|
||||
// SetDebug enabled or disables debugging for the given facility name.
|
||||
func (l *logger) SetDebug(facility string, enabled bool) {
|
||||
l.mut.Lock()
|
||||
l.debug[facility] = enabled
|
||||
l.mut.Unlock()
|
||||
l.SetFlags(DebugFlags)
|
||||
defer l.mut.Unlock()
|
||||
if _, ok := l.debug[facility]; enabled && !ok {
|
||||
l.SetFlags(DebugFlags)
|
||||
l.debug[facility] = struct{}{}
|
||||
} else if !enabled && ok {
|
||||
delete(l.debug, facility)
|
||||
if len(l.debug) == 0 {
|
||||
l.SetFlags(DefaultFlags)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FacilityDebugging returns the set of facilities that have debugging
|
||||
// enabled.
|
||||
func (l *logger) FacilityDebugging() []string {
|
||||
var enabled []string
|
||||
enabled := make([]string, 0, len(l.debug))
|
||||
l.mut.Lock()
|
||||
for facility, isEnabled := range l.debug {
|
||||
if isEnabled {
|
||||
enabled = append(enabled, facility)
|
||||
}
|
||||
for facility := range l.debug {
|
||||
enabled = append(enabled, facility)
|
||||
}
|
||||
l.mut.Unlock()
|
||||
return enabled
|
||||
@ -249,17 +258,7 @@ func (l *logger) Facilities() map[string]string {
|
||||
// NewFacility returns a new logger bound to the named facility.
|
||||
func (l *logger) NewFacility(facility, description string) Logger {
|
||||
l.mut.Lock()
|
||||
if l.facilities == nil {
|
||||
l.facilities = make(map[string]string)
|
||||
}
|
||||
if description != "" {
|
||||
l.facilities[facility] = description
|
||||
}
|
||||
|
||||
if l.debug == nil {
|
||||
l.debug = make(map[string]bool)
|
||||
}
|
||||
l.debug[facility] = false
|
||||
l.facilities[facility] = description
|
||||
l.mut.Unlock()
|
||||
|
||||
return &facilityLogger{
|
||||
|
Loading…
Reference in New Issue
Block a user