forked from op/go-logging
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlogger_test.go
138 lines (114 loc) · 3.71 KB
/
logger_test.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package logging
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
const (
module = "module"
contextSeparator = ": "
bufferCapacity = 32
format = "%{message}"
msgTemplate = "%s"
msgDebug = "debug"
msgInfo = "info"
msgNotice = "notice"
msgWarning = "warning"
msgError = "error"
msgCritical = "critical"
)
func loggerWithMemoryBackend() *Logger {
l := MustGetLogger(module, contextSeparator, bufferCapacity)
l.SetBackend(newMemoryBackend())
l.SetFormatter(MustStringFormatter(format))
return l
}
func TestLogger_Debug_SimpleMethods(t *testing.T) {
l := loggerWithMemoryBackend()
l.SetLevel(DEBUG)
l.Debug(msgDebug)
l.Info(msgInfo)
l.Notice(msgNotice)
l.Warning(msgWarning)
l.Error(msgError)
l.Critical(msgCritical)
// Check records that were received by backend
backend := l.backend.(*memoryBackend)
assert.Len(t, backend.records, 6)
assert.Len(t, backend.msgs, 0)
assert.Equal(t, msgDebug, backend.records[0].Args[0])
assert.Equal(t, msgInfo, backend.records[1].Args[0])
assert.Equal(t, msgNotice, backend.records[2].Args[0])
assert.Equal(t, msgWarning, backend.records[3].Args[0])
assert.Equal(t, msgError, backend.records[4].Args[0])
assert.Equal(t, msgCritical, backend.records[5].Args[0])
// Ring buffer should be empty, because we're in debug
assert.Nil(t, l.records.Dequeue())
}
func TestLogger_Debug_FormattingMethods(t *testing.T) {
l := loggerWithMemoryBackend()
l.SetLevel(DEBUG)
l.Debugf(msgTemplate, msgDebug)
l.Infof(msgTemplate, msgInfo)
l.Noticef(msgTemplate, msgNotice)
l.Warningf(msgTemplate, msgWarning)
l.Errorf(msgTemplate, msgError)
l.Criticalf(msgTemplate, msgCritical)
// Check records that were received by backend
backend := l.backend.(*memoryBackend)
assert.Len(t, backend.records, 6)
assert.Len(t, backend.msgs, 0)
assert.Equal(t, msgDebug, backend.records[0].Args[0])
assert.Equal(t, msgInfo, backend.records[1].Args[0])
assert.Equal(t, msgNotice, backend.records[2].Args[0])
assert.Equal(t, msgWarning, backend.records[3].Args[0])
assert.Equal(t, msgError, backend.records[4].Args[0])
assert.Equal(t, msgCritical, backend.records[5].Args[0])
// Ring buffer should be empty, because we're in debug
assert.Nil(t, l.records.Dequeue())
}
func TestLogger_Dumping(t *testing.T) {
l := loggerWithMemoryBackend()
l.SetLevel(ERROR)
l.SetDumpBehavior(true, ERROR, "")
// Send several messages that have level less than loggers level
l.Debug(msgDebug)
l.Info(msgInfo)
l.Notice(msgNotice)
l.Warningf(msgTemplate, msgWarning)
// They must not exist in backend yet
backend := l.backend.(*memoryBackend)
assert.Len(t, backend.records, 0)
// Send message with triggering level
l.Error(msgError)
// Now we suppose to have 1 error record and 4 previous messages in backend
assert.Len(t, backend.records, 1)
assert.Len(t, backend.msgs, 4)
assert.Equal(t, msgError, backend.records[0].Args[0])
assert.Equal(t, msgDebug, backend.msgs[0])
assert.Equal(t, msgInfo, backend.msgs[1])
assert.Equal(t, msgNotice, backend.msgs[2])
assert.Equal(t, msgWarning, backend.msgs[3])
// Ring buffer is empty now
assert.Nil(t, l.records.Dequeue())
}
func TestLogger_RingBufferReusage(t *testing.T) {
l := MustGetLogger(module, contextSeparator, 4)
l.SetBackend(newMemoryBackend())
l.SetFormatter(MustStringFormatter(format))
l.SetLevel(ERROR)
l.SetDumpBehavior(true, ERROR, "")
// Write 8 low-level messages
for i := 0; i < 8; i++ {
l.Debug(i)
}
// Flush ring buffer into backend
l.Error(msgError)
backend := l.backend.(*memoryBackend)
assert.Len(t, backend.records, 1)
assert.Len(t, backend.msgs, 4)
// Only last 4 low-level message should appear in backend
for i := 4; i < 8; i++ {
assert.Equal(t, fmt.Sprint(i), backend.msgs[i-4])
}
}