Skip to content

Commit 9037750

Browse files
authored
fix: spanlogger should support log.Valuer (#209)
1 parent a9a5f5b commit 9037750

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

logging/log.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,23 @@ func LevelFilter(levelCfg string) level.Option {
9595
}
9696
}
9797

98+
type span interface {
99+
LogKV(alternatingKeyValues ...interface{})
100+
}
101+
98102
type spanLogger struct {
99-
span opentracing.Span
103+
span span
100104
base log.Logger
101105
kvs []interface{}
102106
}
103107

104108
func (s spanLogger) Log(keyvals ...interface{}) error {
105109
s.kvs = append(s.kvs, keyvals...)
110+
for k := range s.kvs {
111+
if f, ok := s.kvs[k].(log.Valuer); ok {
112+
s.kvs[k] = f()
113+
}
114+
}
106115
s.span.LogKV(s.kvs...)
107116
return s.base.Log(s.kvs...)
108117
}

logging/log_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,22 @@ func TestWithContext(t *testing.T) {
5151
ll.Log("baz", "qux")
5252
assert.Contains(t, buf.String(), "foo=bar baz=qux")
5353
}
54+
55+
type mockSpan struct {
56+
received []interface{}
57+
}
58+
59+
func (m *mockSpan) LogKV(alternatingKeyValues ...interface{}) {
60+
m.received = alternatingKeyValues
61+
}
62+
63+
func TestSpanLogger(t *testing.T) {
64+
var mock mockSpan
65+
spanLogger{
66+
span: &mock,
67+
base: log.NewNopLogger(),
68+
kvs: []interface{}{"foo", "bar"},
69+
}.Log("baz", log.Valuer(func() interface{} { return "qux" }))
70+
71+
assert.Equal(t, []interface{}{"foo", "bar", "baz", "qux"}, mock.received)
72+
}

0 commit comments

Comments
 (0)