55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"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 discarded
|
||
|
func 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
|
||
|
}
|