podman

Форк
0
/
event-hook.go 
72 строки · 1.4 Кб
1
//go:build windows
2

3
package main
4

5
import (
6
	"bytes"
7
	"fmt"
8

9
	"github.com/sirupsen/logrus"
10
	"golang.org/x/sys/windows/svc/eventlog"
11
)
12

13
// Logrus hook that delegates to windows event log
14
type EventLogHook struct {
15
	events *eventlog.Log
16
}
17

18
type LogFormat struct {
19
	name string
20
}
21

22
func (f *LogFormat) Format(entry *logrus.Entry) ([]byte, error) {
23
	var b *bytes.Buffer
24

25
	if entry.Buffer != nil {
26
		b = entry.Buffer
27
	} else {
28
		b = &bytes.Buffer{}
29
	}
30

31
	fmt.Fprintf(b, "[%-5s] %s: %s", entry.Level.String(), f.name, entry.Message)
32

33
	for key, value := range entry.Data {
34
		fmt.Fprintf(b, " {%s = %s}", key, value)
35
	}
36

37
	b.WriteByte('\n')
38
	return b.Bytes(), nil
39
}
40

41
func NewEventHook(events *eventlog.Log, name string) *EventLogHook {
42
	logrus.SetFormatter(&LogFormat{name})
43
	return &EventLogHook{events}
44
}
45

46
func (hook *EventLogHook) Fire(entry *logrus.Entry) error {
47
	line, err := entry.String()
48
	if err != nil {
49
		return err
50
	}
51

52
	switch entry.Level {
53
	case logrus.PanicLevel:
54
		return hook.events.Error(1002, line)
55
	case logrus.FatalLevel:
56
		return hook.events.Error(1001, line)
57
	case logrus.ErrorLevel:
58
		return hook.events.Error(1000, line)
59
	case logrus.WarnLevel:
60
		return hook.events.Warning(1000, line)
61
	case logrus.InfoLevel:
62
		return hook.events.Info(1000, line)
63
	case logrus.DebugLevel, logrus.TraceLevel:
64
		return hook.events.Info(1001, line)
65
	default:
66
		return nil
67
	}
68
}
69

70
func (hook *EventLogHook) Levels() []logrus.Level {
71
	return logrus.AllLevels
72
}
73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.