Skip to content

Commit

Permalink
fixes #252 Add logging to ease debugging connection reattempts
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben Krieger committed Nov 14, 2016
1 parent 68cfb1b commit 187c47a
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ wenfang <[email protected]>
Anner van Hardenbroek <[email protected]>
Gerrit Renker <[email protected]>
Rene Kaufmann <[email protected]>
Ben Krieger <[email protected]>
1 change: 1 addition & 0 deletions core.go
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,7 @@ func (d *dialer) dialer() {
case <-d.sock.closeq: // exit if parent socket closed
return
case <-time.After(rtime):
log.Debugf("attempting socket redial after error: %v", err)
if rtmax > 0 {
rtime *= 2
if rtime > rtmax {
Expand Down
77 changes: 77 additions & 0 deletions log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package mangos

import "strings"

// Logger is an interface that describes a very basic logger.
// It only needs INFO and DEBUG levels, because errors are
// returned by the library code and warnings are just ignored
// errors (which is a bad idea). See:
// http://dave.cheney.net/2015/11/05/lets-talk-about-logging
type Logger interface {
Infof(string, ...interface{})
Debugf(string, ...interface{})
}

type loggers struct {
loggers []Logger
level int
}

var log loggers

// RegisterLogger appends a new logger to the list of loggers.
// The same logger can be registered multiple times, but will
// then be used multiple times.
func RegisterLogger(l Logger) {
log.loggers = append(log.loggers, l)
}

// SetLogLevel understands the following levels:
// 0 - No output
// 1 - Only INFO level
// 2 - Both INFO and DEBUG level
func SetLogLevel(i int) {
log.level = i
}

// Infof calls Infof on all registered loggers if the log level
// is set to 1 or greater
func (l *loggers) Infof(fmt string, v ...interface{}) {
if l.level < 1 {
return
}
for _, lg := range l.loggers {
lg.Infof(fmt, v...)
}
}

// Info logs the values space-separated on all registered
// loggers if the log level is set to 1 or greater
func (l *loggers) Info(v ...interface{}) {
if len(v) == 0 {
return
}
fmt := strings.Repeat(" %v", len(v))
l.Infof(fmt[1:], v...)
}

// Debugf calls Debugf on all registered loggers if the log level
// is set to 2 or greater
func (l *loggers) Debugf(fmt string, v ...interface{}) {
if l.level < 2 {
return
}
for _, lg := range l.loggers {
lg.Debugf(fmt, v...)
}
}

// Debug logs the values space-separated on all registered
// loggers if the log level is set to 2 or greater
func (l *loggers) Debug(v ...interface{}) {
if len(v) == 0 {
return
}
fmt := strings.Repeat(" %v", len(v))
l.Debugf(fmt[1:], v...)
}
21 changes: 21 additions & 0 deletions log/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package log

import (
"log"

"github.com/go-mangos/mangos"
)

func init() {
mangos.RegisterLogger(&logger{})
}

type logger struct{}

func (l *logger) Infof(fmt string, v ...interface{}) {
log.Printf("[INFO] mangos: "+fmt, v...)
}

func (l *logger) Debugf(fmt string, v ...interface{}) {
log.Printf("[DEBUG] mangos: "+fmt, v...)
}

0 comments on commit 187c47a

Please sign in to comment.