Make the DistinctErrorLogger more generic

This commit is contained in:
Bjørn Erik Pedersen 2016-01-28 14:00:03 +01:00
parent 3b3e771d61
commit 3054a46185

View file

@ -181,15 +181,20 @@ func ThemeSet() bool {
return viper.GetString("theme") != ""
}
// DistinctErrorLogger ignores duplicate log statements.
type DistinctErrorLogger struct {
sync.RWMutex
m map[string]bool
type logPrinter interface {
Println(a ...interface{})
}
// Printf will ERROR log the string returned from fmt.Sprintf given the arguments,
// DistinctLogger ignores duplicate log statements.
type DistinctLogger struct {
sync.RWMutex
logger logPrinter
m map[string]bool
}
// Printf will log the string returned from fmt.Sprintf given the arguments,
// but not if it has been logged before.
func (l *DistinctErrorLogger) Printf(format string, v ...interface{}) {
func (l *DistinctLogger) Printf(format string, v ...interface{}) {
logStatement := fmt.Sprintf(format, v...)
l.RLock()
if l.m[logStatement] {
@ -200,15 +205,16 @@ func (l *DistinctErrorLogger) Printf(format string, v ...interface{}) {
l.Lock()
if !l.m[logStatement] {
jww.ERROR.Print(logStatement)
l.logger.Println(logStatement)
l.m[logStatement] = true
fmt.Println()
}
l.Unlock()
}
// NewDistinctErrorLogger creates a new DistinctErrorLogger
func NewDistinctErrorLogger() *DistinctErrorLogger {
return &DistinctErrorLogger{m: make(map[string]bool)}
// NewDistinctErrorLogger creates a new DistinctLogger that logs ERRORs
func NewDistinctErrorLogger() *DistinctLogger {
return &DistinctLogger{m: make(map[string]bool), logger: jww.ERROR}
}
// Avoid spamming the logs with errors