hooks.go raw

   1  package logrus
   2  
   3  // A hook to be fired when logging on the logging levels returned from
   4  // `Levels()` on your implementation of the interface. Note that this is not
   5  // fired in a goroutine or a channel with workers, you should handle such
   6  // functionality yourself if your call is non-blocking and you don't wish for
   7  // the logging calls for levels returned from `Levels()` to block.
   8  type Hook interface {
   9  	Levels() []Level
  10  	Fire(*Entry) error
  11  }
  12  
  13  // Internal type for storing the hooks on a logger instance.
  14  type LevelHooks map[Level][]Hook
  15  
  16  // Add a hook to an instance of logger. This is called with
  17  // `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
  18  func (hooks LevelHooks) Add(hook Hook) {
  19  	for _, level := range hook.Levels() {
  20  		hooks[level] = append(hooks[level], hook)
  21  	}
  22  }
  23  
  24  // Fire all the hooks for the passed level. Used by `entry.log` to fire
  25  // appropriate hooks for a log entry.
  26  func (hooks LevelHooks) Fire(level Level, entry *Entry) error {
  27  	for _, hook := range hooks[level] {
  28  		if err := hook.Fire(entry); err != nil {
  29  			return err
  30  		}
  31  	}
  32  
  33  	return nil
  34  }
  35