package test import ( "io/ioutil" "github.com/sirupsen/logrus" ) // test.Hook is a hook designed for dealing with logs in test scenarios. type Hook struct { Entries []*logrus.Entry } // Installs a test hook for the global logger. func NewGlobal() *Hook { hook := new(Hook) logrus.AddHook(hook) return hook } // Installs a test hook for a given local logger. func NewLocal(logger *logrus.Logger) *Hook { hook := new(Hook) logger.Hooks.Add(hook) return hook } // Creates a discarding logger and installs the test hook. func NewNullLogger() (*logrus.Logger, *Hook) { logger := logrus.New() logger.Out = ioutil.Discard return logger, NewLocal(logger) } func (t *Hook) Fire(e *logrus.Entry) error { t.Entries = append(t.Entries, e) return nil } func (t *Hook) Levels() []logrus.Level { return logrus.AllLevels } // LastEntry returns the last entry that was logged or nil. func (t *Hook) LastEntry() (l *logrus.Entry) { if i := len(t.Entries) - 1; i < 0 { return nil } else { return t.Entries[i] } } // Reset removes all Entries from this test hook. func (t *Hook) Reset() { t.Entries = make([]*logrus.Entry, 0) }