design/56345-structured-logging.md: remove NewContext, FromContext and Ctx
Since there is a lot of pushback on this feature, remove it from this proposal.
We will create a separate proposal later.
Change-Id: Ic6ddaa28007c11b2444125b5da1039c2d37c0f5e
Reviewed-on: https://go-review.googlesource.com/c/proposal/+/461941
Reviewed-by: Alan Donovan <adonovan@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
diff --git a/design/56345-structured-logging.md b/design/56345-structured-logging.md
index 9a0bde1..efe35d3 100644
--- a/design/56345-structured-logging.md
+++ b/design/56345-structured-logging.md
@@ -718,45 +718,9 @@
attributes added to the Logger will be qualified by the given name.
```
-### Context Support
+### Contexts in Loggers
-#### Loggers in contexts
-
-Passing a logger in a `context.Context` is a common practice and one way to
-include dynamically scoped information in log messages.
-
-The `slog` package has two functions to support this pattern.
-
-```
-func FromContext(ctx context.Context) *Logger
- FromContext returns the Logger stored in ctx by NewContext, or the default
- Logger if there is none.
-
-func NewContext(ctx context.Context, l Logger) context.Context
- NewContext returns a context that contains the given Logger. Use FromContext
- to retrieve the Logger.
-```
-
-As an example, an HTTP server might want to create a new `Logger` for each
-request. The logger would contain request-wide attributes and be stored in the
-context for the request.
-
-```
-func handle(w http.ResponseWriter, r *http.Request) {
- rlogger := slog.FromContext(r.Context()).With(
- "method", r.Method,
- "url", r.URL,
- "traceID", getTraceID(r),
- )
- ctx := slog.NewContext(r.Context(), rlogger)
- // ... use slog.FromContext(ctx) ...
-}
-```
-
-#### Contexts in Loggers
-
-Putting a new `Logger` into a context each time a value is added to the context
-complicates the code, and is easy to forget to do.
+Handlers sometimes need to retrieve values from a context.
Tracing spans are a prime example.
In tracing packages like the one provided by [Open
Telemetry](https://opentelemetry.io), spans can be created at any point in the
@@ -766,18 +730,12 @@
ctx, span := tracer.Start(ctx, name, opts)
```
-It is too much to require programmers to then write
-```
-ctx = slog.NewContext(slog.FromContext(ctx))
-```
-so that subsequent logging has access to the span ID.
-So we provide the `Logger.WithContext` method to convey a context to a
+We provide the `Logger.WithContext` method to convey a context to a
`Handler`.
The method returns a new `Logger` that can be stored, or immediately
used to produce log output.
A `Logger`'s context is available to a `Handler.Handle` method in the
`Record.Context` field.
-We also provide a convenient shorthand, `slog.Ctx`.
```
func (l *Logger) WithContext(ctx context.Context) *Logger
@@ -786,11 +744,6 @@
func (l *Logger) Context() context.Context
Context returns l's context.
-
-func Ctx(ctx context.Context) *Logger
- Ctx retrieves a Logger from the given context using FromContext. Then it
- adds the given context to the Logger using WithContext and returns the
- result.
```
### Levels
@@ -1021,10 +974,6 @@
func LogAttrs(level Level, msg string, attrs ...Attr)
LogAttrs calls Logger.LogAttrs on the default logger.
-func NewContext(ctx context.Context, l *Logger) context.Context
- NewContext returns a context that contains the given Logger. Use FromContext
- to retrieve the Logger.
-
func SetDefault(l *Logger)
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
@@ -1328,18 +1277,9 @@
To create a new Logger, call New or a Logger method that begins "With".
-func Ctx(ctx context.Context) *Logger
- Ctx retrieves a Logger from the given context using FromContext. Then it
- adds the given context to the Logger using WithContext and returns the
- result.
-
func Default() *Logger
Default returns the default Logger.
-func FromContext(ctx context.Context) *Logger
- FromContext returns the Logger stored in ctx by NewContext, or the default
- Logger if there is none.
-
func New(h Handler) *Logger
New creates a new Logger with the given non-nil Handler and a nil context.