Make the DistinctErrorLogger more generic
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 28 Jan 2016 13:00:03 +0000 (14:00 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 28 Jan 2016 14:33:41 +0000 (15:33 +0100)
helpers/general.go

index 333cbfa3c4646b4062acf2dbd21225b0a7b0714c..3126bf5ca235e5d8704137e4ce9c43d9853ab68c 100644 (file)
@@ -181,15 +181,20 @@ func ThemeSet() bool {
        return viper.GetString("theme") != ""
 }
 
-// DistinctErrorLogger ignores duplicate log statements.
-type DistinctErrorLogger struct {
+type logPrinter interface {
+       Println(a ...interface{})
+}
+
+// DistinctLogger ignores duplicate log statements.
+type DistinctLogger struct {
        sync.RWMutex
-       m map[string]bool
+       logger logPrinter
+       m      map[string]bool
 }
 
-// Printf will ERROR log the string returned from fmt.Sprintf given the arguments,
+// 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