From: 喜欢 Date: Fri, 28 Mar 2025 06:39:41 +0000 (+0000) Subject: log/slog: log and logAttrs initialize ctx at top X-Git-Tag: go1.25rc1~569 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7177f2400995901b666b1ed94d87c15c8c410fab;p=gostls13.git log/slog: log and logAttrs initialize ctx at top In extreme cases (e.g., ctx = nil), it is recommended to initialize the context only once at the entry point before using log and logAttrs. Change-Id: Ib191963f52183406d7fcd5104b60fea1a9e1bc80 GitHub-Last-Rev: e1719b95390011a45a0a6652a13e675279bc76cd GitHub-Pull-Request: golang/go#73066 Reviewed-on: https://go-review.googlesource.com/c/go/+/661255 Reviewed-by: Carlos Amedee Reviewed-by: Jonathan Amsterdam LUCI-TryBot-Result: Go LUCI --- diff --git a/src/log/slog/logger.go b/src/log/slog/logger.go index 961e0cd2ce..69e1cf9f15 100644 --- a/src/log/slog/logger.go +++ b/src/log/slog/logger.go @@ -238,6 +238,9 @@ func (l *Logger) ErrorContext(ctx context.Context, msg string, args ...any) { // It must always be called directly by an exported logging method // or function, because it uses a fixed call depth to obtain the pc. func (l *Logger) log(ctx context.Context, level Level, msg string, args ...any) { + if ctx == nil { + ctx = context.Background() + } if !l.Enabled(ctx, level) { return } @@ -250,14 +253,14 @@ func (l *Logger) log(ctx context.Context, level Level, msg string, args ...any) } r := NewRecord(time.Now(), level, msg, pc) r.Add(args...) - if ctx == nil { - ctx = context.Background() - } _ = l.Handler().Handle(ctx, r) } // logAttrs is like [Logger.log], but for methods that take ...Attr. func (l *Logger) logAttrs(ctx context.Context, level Level, msg string, attrs ...Attr) { + if ctx == nil { + ctx = context.Background() + } if !l.Enabled(ctx, level) { return } @@ -270,9 +273,6 @@ func (l *Logger) logAttrs(ctx context.Context, level Level, msg string, attrs .. } r := NewRecord(time.Now(), level, msg, pc) r.AddAttrs(attrs...) - if ctx == nil { - ctx = context.Background() - } _ = l.Handler().Handle(ctx, r) }