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 }