Skip to content

Commit a8bb41a

Browse files
authored
fix(logging): inconsistency between go kit Logger and spanLogger (#211)
Only log.Valuer passed via log.With are treated as dynamic argument in go kit log. The change makes spanLogger consistent with go kit.
1 parent 2357197 commit a8bb41a

File tree

2 files changed

+7
-19
lines changed

2 files changed

+7
-19
lines changed

logging/log.go

+5-17
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@ type spanLogger struct {
106106
}
107107

108108
func (s spanLogger) Log(keyvals ...interface{}) error {
109-
s.kvs = append(s.kvs, keyvals...)
110109
for k := range s.kvs {
111110
if f, ok := s.kvs[k].(log.Valuer); ok {
112111
s.kvs[k] = f()
113112
}
114113
}
114+
s.kvs = append(s.kvs, keyvals...)
115115
s.span.LogKV(s.kvs...)
116-
return s.base.Log(s.kvs...)
116+
return s.base.Log(keyvals...)
117117
}
118118

119119
// WithContext decorates the log.Logger with information form context. If there is an opentracing span
@@ -127,27 +127,15 @@ func WithContext(logger log.Logger, ctx context.Context) log.Logger {
127127
args = append(args, kv.Key, kv.Val)
128128
}
129129

130+
base := log.With(logger, args...)
131+
130132
span := opentracing.SpanFromContext(ctx)
131133
if span == nil {
132-
return withContext(logger, ctx)
134+
return base
133135
}
134136
return spanLogger{span: span, base: logger, kvs: args}
135137
}
136138

137-
func withContext(logger log.Logger, ctx context.Context) log.Logger {
138-
var args []interface{}
139-
140-
bag := ctxmeta.GetBaggage(ctx)
141-
for _, kv := range bag.Slice() {
142-
args = append(args, kv.Key, kv.Val)
143-
}
144-
145-
return log.With(
146-
logger,
147-
args...,
148-
)
149-
}
150-
151139
type levelLogger struct {
152140
log.Logger
153141
}

logging/log_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ func TestSpanLogger(t *testing.T) {
6565
spanLogger{
6666
span: &mock,
6767
base: log.NewNopLogger(),
68-
kvs: []interface{}{"foo", "bar"},
69-
}.Log("baz", log.Valuer(func() interface{} { return "qux" }))
68+
kvs: []interface{}{"foo", log.Valuer(func() interface{} { return "bar" })},
69+
}.Log("baz", "qux")
7070

7171
assert.Equal(t, []interface{}{"foo", "bar", "baz", "qux"}, mock.received)
7272
}

0 commit comments

Comments
 (0)