-
Notifications
You must be signed in to change notification settings - Fork 1
/
testlogging.go
69 lines (61 loc) · 1.62 KB
/
testlogging.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
package observance
import (
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus/hooks/test"
)
// TestLogger is an extended Logger interface for testing.
// It allows to check the logs that were recorded.
type TestLogger interface {
Logger
LastEntry() TestLogEntry
Entries() []TestLogEntry
Reset()
}
// TestLogEntry represents one recorded log entry in the test logger.
type TestLogEntry struct {
Level string
Message string
Data map[string]interface{}
}
// LogrusTestLogger implements TestLogger.
type LogrusTestLogger struct {
LogrusLogger
result *test.Hook
}
// LastEntry returns the last recorded log entry.
func (l *LogrusTestLogger) LastEntry() TestLogEntry {
return TestLogEntry{
Level: l.result.LastEntry().Level.String(),
Message: l.result.LastEntry().Message,
Data: l.result.LastEntry().Data,
}
}
// Entries returns all recorded log entries.
func (l *LogrusTestLogger) Entries() []TestLogEntry {
entries := []TestLogEntry{}
for _, entry := range l.result.AllEntries() {
newEntry := TestLogEntry{
Level: entry.Level.String(),
Message: entry.Message,
Data: entry.Data,
}
entries = append(entries, newEntry)
}
return entries
}
// Reset clears the recorded logs to start fresh.
func (l *LogrusTestLogger) Reset() {
l.result.Reset()
}
// NewTestLogger creates a new TestLogger that can be used to create a test observance instance.
func NewTestLogger() TestLogger {
logger, hook := test.NewNullLogger()
logger.SetLevel(logrus.DebugLevel)
return &LogrusTestLogger{
LogrusLogger: LogrusLogger{
basicLogger: logger,
logger: logger.WithFields(nil),
},
result: hook,
}
}