| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | package mainimport (	"fmt"	"io/ioutil"	"os"	"github.com/kardianos/service"	"github.com/sirupsen/logrus")// HookLogger routes the logrus logs through the service logger so that they end up in the Windows Event Viewer// logrus output will be discardedfunc HookLogger(l *logrus.Logger) {	l.AddHook(newLogHook(logger))	l.SetOutput(ioutil.Discard)}type logHook struct {	sl service.Logger}func newLogHook(sl service.Logger) *logHook {	return &logHook{sl: sl}}func (h *logHook) Fire(entry *logrus.Entry) error {	line, err := entry.String()	if err != nil {		fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)		return err	}	switch entry.Level {	case logrus.PanicLevel:		return h.sl.Error(line)	case logrus.FatalLevel:		return h.sl.Error(line)	case logrus.ErrorLevel:		return h.sl.Error(line)	case logrus.WarnLevel:		return h.sl.Warning(line)	case logrus.InfoLevel:		return h.sl.Info(line)	case logrus.DebugLevel:		return h.sl.Info(line)	default:		return nil	}}func (h *logHook) Levels() []logrus.Level {	return logrus.AllLevels}
 |