github.com/alloyci/alloy-runner@v1.0.1-0.20180222164613-925503ccafd6/helpers/fatal_panic.go (about)

     1  package helpers
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  
     7  	"github.com/Sirupsen/logrus"
     8  )
     9  
    10  type fatalLogHook struct {
    11  	output io.Writer
    12  }
    13  
    14  func (s *fatalLogHook) Levels() []logrus.Level {
    15  	return []logrus.Level{
    16  		logrus.FatalLevel,
    17  	}
    18  }
    19  
    20  func (s *fatalLogHook) Fire(e *logrus.Entry) error {
    21  	fmt.Fprint(s.output, e.Message)
    22  
    23  	panic(e)
    24  }
    25  
    26  func MakeFatalToPanic() func() {
    27  	hook := &fatalLogHook{
    28  		output: logrus.StandardLogger().Out,
    29  	}
    30  	logrus.AddHook(hook)
    31  
    32  	removeHook := func() {
    33  		for level, levelHooks := range logrus.StandardLogger().Hooks {
    34  			hooks := []logrus.Hook{}
    35  			for _, existingHook := range levelHooks {
    36  				if existingHook != hook {
    37  					hooks = append(hooks, existingHook)
    38  				}
    39  			}
    40  			logrus.StandardLogger().Hooks[level] = hooks
    41  		}
    42  	}
    43  
    44  	return removeHook
    45  }