mirror of
https://github.com/containers/podman.git
synced 2025-06-11 18:28:41 +08:00
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
//go: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
|
|
}
|