Skip to content

Commit ba987e4

Browse files
authored
Merge pull request #1141 from charithe/fix/logging-ctx
🐛 Handle empty contexts in log.FromContext
2 parents 7dfe893 + 3cfd8b6 commit ba987e4

File tree

2 files changed

+50
-8
lines changed

2 files changed

+50
-8
lines changed

pkg/log/log.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@ var Log = NewDelegatingLogger(NullLogger{})
5555

5656
// FromContext returns a logger with predefined values from a context.Context.
5757
func FromContext(ctx context.Context, keysAndValues ...interface{}) logr.Logger {
58-
var log logr.Logger
59-
if ctx == nil {
60-
log = Log
61-
} else {
62-
lv := ctx.Value(contextKey)
63-
log = lv.(logr.Logger)
58+
var log logr.Logger = Log
59+
60+
if ctx != nil {
61+
if lv := ctx.Value(contextKey); lv != nil {
62+
log = lv.(logr.Logger)
63+
}
6464
}
65-
log.WithValues(keysAndValues...)
66-
return log
65+
66+
return log.WithValues(keysAndValues...)
6767
}
6868

6969
// IntoContext takes a context and sets the logger as one of its keys.

pkg/log/log_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package log
1818

1919
import (
20+
"context"
21+
2022
"github.com/go-logr/logr"
2123
. "github.com/onsi/ginkgo"
2224
. "github.com/onsi/gomega"
@@ -214,4 +216,44 @@ var _ = Describe("logging", func() {
214216
))
215217
})
216218
})
219+
220+
Describe("logger from context", func() {
221+
It("should return default logger when context is empty", func() {
222+
gotLog := FromContext(context.Background())
223+
Expect(gotLog).To(Not(BeNil()))
224+
})
225+
226+
It("should return existing logger", func() {
227+
root := &fakeLoggerRoot{}
228+
baseLog := &fakeLogger{root: root}
229+
230+
wantLog := baseLog.WithName("my-logger")
231+
ctx := IntoContext(context.Background(), wantLog)
232+
233+
gotLog := FromContext(ctx)
234+
Expect(gotLog).To(Not(BeNil()))
235+
236+
gotLog.Info("test message")
237+
Expect(root.messages).To(ConsistOf(
238+
logInfo{name: []string{"my-logger"}, msg: "test message"},
239+
))
240+
})
241+
242+
It("should have added key-values", func() {
243+
root := &fakeLoggerRoot{}
244+
baseLog := &fakeLogger{root: root}
245+
246+
wantLog := baseLog.WithName("my-logger")
247+
ctx := IntoContext(context.Background(), wantLog)
248+
249+
gotLog := FromContext(ctx, "tag1", "value1")
250+
Expect(gotLog).To(Not(BeNil()))
251+
252+
gotLog.Info("test message")
253+
Expect(root.messages).To(ConsistOf(
254+
logInfo{name: []string{"my-logger"}, tags: []interface{}{"tag1", "value1"}, msg: "test message"},
255+
))
256+
})
257+
})
258+
217259
})

0 commit comments

Comments
 (0)