-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog-generator.go
112 lines (96 loc) · 2.22 KB
/
log-generator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package main
import (
"math/rand"
"time"
"github.com/sirupsen/logrus"
)
type Loglevel int
const (
Error Loglevel = iota
Debug
Info
Warn
Security
Severe
)
type logitem struct {
loglevel Loglevel
message string
}
var services = []string{
"web-ui", "bank", "mysqld", "nfs",
}
var events = []string{
"startup", "login", "payment", "sync",
}
var messages = []logitem{
logitem{Debug, "User login successfull"},
logitem{Debug, "Payment processed succesfully"},
logitem{Severe, "Database connection error"},
logitem{Security, "Unauthorized access attempt detected"},
logitem{Debug, "Session expired"},
logitem{Info, "Cache invalidated"},
logitem{Warn, "Network slowdown detected"},
logitem{Error, "service restarting due to memory pressure"},
}
func main() {
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.WithFields(logrus.Fields{
"service": "log-generator",
"event": "startup",
}).Info("Log generator is starting")
for {
time.Sleep(time.Second / (time.Duration)(rand.Intn(10)+1))
message := selectMessage()
service := selectService()
event := selectEvent()
callable := resolveLogMethod(log, event, service, message.loglevel)
callable(message.message)
}
}
func resolveLogMethod(log *logrus.Logger, event string, service string, ll Loglevel) func(args ...interface{}) {
switch ll {
case Error, Security, Severe:
return log.WithFields(logrus.Fields{
"service": service,
"event": event,
}).Error
case Info:
return log.WithFields(logrus.Fields{
"service": service,
"event": event,
}).Info
case Debug:
return log.WithFields(logrus.Fields{
"service": service,
"event": event,
}).Debug
case Warn:
return log.WithFields(logrus.Fields{
"service": service,
"event": event,
}).Warn
default:
return log.WithFields(logrus.Fields{
"service": service,
"event": event,
}).Info
}
}
func getRandomIndex(length int) int {
randomIndex := rand.Intn(length)
return randomIndex
}
func selectEvent() string {
pick := events[getRandomIndex(len(events))]
return pick
}
func selectService() string {
pick := services[getRandomIndex(len(services))]
return pick
}
func selectMessage() logitem {
pick := messages[getRandomIndex(len(messages))]
return pick
}