src.dualinventive.com/go/lib/dilog/testlogger.go

42 lines
894 B
Go

package dilog
import (
"io/ioutil"
"strings"
"testing"
"github.com/sirupsen/logrus"
)
type logrusTestingHook struct {
t *testing.T
formatter logrus.Formatter
}
// NewTestLogger returns a new logrusTestingHook which logs everything to `t.Log()`
func NewTestLogger(t *testing.T) Logger {
logger := logrus.New()
logger.Out = ioutil.Discard
logger.SetLevel(logrus.DebugLevel)
logger.AddHook(logrusTestingHook{
t: t,
formatter: logger.Formatter,
})
return &Logrus{logrus.NewEntry(logger)}
}
// Fire takes, formats and sends the entry to `t.Log()`
func (h logrusTestingHook) Fire(e *logrus.Entry) error {
dataBytes, err := h.formatter.Format(e)
if err != nil {
return err
}
h.t.Log(strings.TrimRight(string(dataBytes), "\n"))
return nil
}
// Levels returns all logrus levels
func (h logrusTestingHook) Levels() []logrus.Level {
return logrus.AllLevels
}