forked from lug/matterbridge
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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)
 | |
| }
 | 
