From dd4d6fce2cdeb6d3b60c85705975f171c346b2f2 Mon Sep 17 00:00:00 2001 From: lingdor Date: Fri, 8 Mar 2024 01:55:08 +0800 Subject: [PATCH] add contextdefault to slow --- slog/context.go | 7 +++++++ slog/logger.go | 12 ++++++++++++ slog/logger_test.go | 10 ++++++++++ 3 files changed, 29 insertions(+) create mode 100644 slog/context.go diff --git a/slog/context.go b/slog/context.go new file mode 100644 index 000000000..b7d97a247 --- /dev/null +++ b/slog/context.go @@ -0,0 +1,7 @@ +package slog + +type contextValKey int + +const ( + defaultContextValKey contextValKey = iota +) diff --git a/slog/logger.go b/slog/logger.go index e87ec9936..80b7ed0d7 100644 --- a/slog/logger.go +++ b/slog/logger.go @@ -23,6 +23,18 @@ func init() { // Default returns the default Logger. func Default() *Logger { return defaultLogger.Load().(*Logger) } +func DefaultOfContext(ctx context.Context) *Logger { + if v := ctx.Value(defaultContextValKey); v != nil { + return v.(*Logger) + } else { + return Default() + } +} + +func NewContext(parent context.Context, l *Logger) context.Context { + return context.WithValue(parent, defaultContextValKey, l) +} + // SetDefault makes l the default Logger. // After this call, output from the log package's default Logger // (as with [log.Print], etc.) will be logged at LevelInfo using l's Handler. diff --git a/slog/logger_test.go b/slog/logger_test.go index 7e9ae5d76..c58e4797f 100644 --- a/slog/logger_test.go +++ b/slog/logger_test.go @@ -574,3 +574,13 @@ func TestPanics(t *testing.T) { logBuf.Reset() } } + +func TestContext(t *testing.T) { + logger := With("traceid", "123456") + ctx := context.Background() + ctx = NewContext(ctx, logger) + gotLogger := DefaultContext(ctx) + if gotLogger != logger { + t.Errorf("Logger is not equal in context value") + } +}