diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-09-08 12:26:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-08 12:26:50 +0200 |
commit | d729dd8c2e6556de10c4543c018fbebffa265a5e (patch) | |
tree | b374d334aef07d3b699e4f4bdf3861de48206b75 /cmd/podman-wslkerninst/event-hook.go | |
parent | e46bcd72f8d6528dbafb1ad1b34abeb0177a8b77 (diff) | |
parent | 744878a71cb225fca6cf6b8f322539b717559614 (diff) | |
download | podman-d729dd8c2e6556de10c4543c018fbebffa265a5e.tar.gz podman-d729dd8c2e6556de10c4543c018fbebffa265a5e.tar.bz2 podman-d729dd8c2e6556de10c4543c018fbebffa265a5e.zip |
Merge pull request #15610 from n1hility/release-workflow
Introduce a new signed Windows installer with automated build process
Diffstat (limited to 'cmd/podman-wslkerninst/event-hook.go')
-rw-r--r-- | cmd/podman-wslkerninst/event-hook.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/cmd/podman-wslkerninst/event-hook.go b/cmd/podman-wslkerninst/event-hook.go new file mode 100644 index 000000000..a5c23e4cf --- /dev/null +++ b/cmd/podman-wslkerninst/event-hook.go @@ -0,0 +1,73 @@ +//go:build windows +// +build windows + +package main + +import ( + "bytes" + "fmt" + + "github.com/sirupsen/logrus" + "golang.org/x/sys/windows/svc/eventlog" +) + +// Logrus hook that delegates to windows event log +type EventLogHook struct { + events *eventlog.Log +} + +type LogFormat struct { + name string +} + +func (f *LogFormat) Format(entry *logrus.Entry) ([]byte, error) { + var b *bytes.Buffer + + if entry.Buffer != nil { + b = entry.Buffer + } else { + b = &bytes.Buffer{} + } + + fmt.Fprintf(b, "[%-5s] %s: %s", entry.Level.String(), f.name, entry.Message) + + for key, value := range entry.Data { + fmt.Fprintf(b, " {%s = %s}", key, value) + } + + b.WriteByte('\n') + return b.Bytes(), nil +} + +func NewEventHook(events *eventlog.Log, name string) *EventLogHook { + logrus.SetFormatter(&LogFormat{name}) + return &EventLogHook{events} +} + +func (hook *EventLogHook) Fire(entry *logrus.Entry) error { + line, err := entry.String() + if err != nil { + return err + } + + switch entry.Level { + case logrus.PanicLevel: + return hook.events.Error(1002, line) + case logrus.FatalLevel: + return hook.events.Error(1001, line) + case logrus.ErrorLevel: + return hook.events.Error(1000, line) + case logrus.WarnLevel: + return hook.events.Warning(1000, line) + case logrus.InfoLevel: + return hook.events.Info(1000, line) + case logrus.DebugLevel, logrus.TraceLevel: + return hook.events.Info(1001, line) + default: + return nil + } +} + +func (hook *EventLogHook) Levels() []logrus.Level { + return logrus.AllLevels +} |