| 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) |
| } |