/
testing.go
100 lines (84 loc) · 2.52 KB
/
testing.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
package stdlib
import (
"fmt"
"strings"
"testing"
"gopkg.in/birkirb/loggers.v1"
"gopkg.in/birkirb/loggers.v1/mappers"
)
// goTestLog maps the testing logger to an Advanced log interface.
// However it ignores any level info.
type goTestLog struct {
logger *testing.T
}
// NewDefaultLogger returns a Contextual logger using a *testing.T with Log/Logf output.
// This allows logging to be redirected to the test where it belongs.
func NewTestingLogger(t *testing.T) loggers.Contextual {
t.Helper()
var g goTestLog
g.logger = t
a := mappers.NewContextualMapTesting(&g, t)
a.Debugf("Now using Go's stdlib testing log (via loggers/mappers/stdlib).")
return a
}
// LevelPrint is a Mapper method
func (l *goTestLog) LevelPrint(lev mappers.Level, i ...interface{}) {
l.logger.Helper()
v := []interface{}{lev}
v = append(v, i...)
l.logger.Log(v...)
}
// LevelPrintf is a Mapper method
func (l *goTestLog) LevelPrintf(lev mappers.Level, format string, i ...interface{}) {
l.logger.Helper()
f := "%s" + format
v := []interface{}{lev}
v = append(v, i...)
l.logger.Logf(f, v...)
}
// LevelPrintln is a Mapper method
func (l *goTestLog) LevelPrintln(lev mappers.Level, i ...interface{}) {
l.logger.Helper()
v := []interface{}{lev}
v = append(v, i...)
l.logger.Log(v...)
}
// WithField returns an advanced logger with a pre-set field.
func (l *goTestLog) WithField(key string, value interface{}) loggers.Advanced {
return l.WithFields(key, value)
}
// WithFields returns an advanced logger with pre-set fields.
func (l *goTestLog) WithFields(fields ...interface{}) loggers.Advanced {
s := make([]string, 0, len(fields)/2)
for i := 0; i+1 < len(fields); i = i + 2 {
key := fields[i]
value := fields[i+1]
s = append(s, fmt.Sprint(key, "=", value))
}
r := goTestLogPostfixLogger{l, "["+strings.Join(s, ", ")+"]"}
return mappers.NewAdvancedMapTesting(&r, l.logger)
}
type goTestLogPostfixLogger struct {
*goTestLog
postfix string
}
func (r *goTestLogPostfixLogger) LevelPrint(lev mappers.Level, i ...interface{}) {
r.logger.Helper()
if len(r.postfix) > 0 {
i = append(i, " ", r.postfix)
}
r.goTestLog.LevelPrint(lev, i...)
}
func (r *goTestLogPostfixLogger) LevelPrintf(lev mappers.Level, format string, i ...interface{}) {
r.logger.Helper()
if len(r.postfix) > 0 {
format = format + " %s"
i = append(i, r.postfix)
}
r.goTestLog.LevelPrintf(lev, format, i...)
}
func (r *goTestLogPostfixLogger) LevelPrintln(lev mappers.Level, i ...interface{}) {
r.logger.Helper()
i = append(i, r.postfix)
r.goTestLog.LevelPrintln(lev, i...)
}