]> Cypherpunks repositories - gostls13.git/commitdiff
log/slog: don't call SetDefault in examples
authorJonathan Amsterdam <jba@google.com>
Wed, 5 Apr 2023 10:13:17 +0000 (06:13 -0400)
committerJonathan Amsterdam <jba@google.com>
Wed, 12 Apr 2023 19:35:47 +0000 (19:35 +0000)
Replace the default Logger in some examples with a locally constructed
Logger.

Calling SetDefault changes global state that could affect other tests.
Although we could use a defer to restore the state, that clutters
the example and would not work if tests were run concurrently.

Change-Id: Ib2595c57f8e6c3e0b39b982f682ba287c2ae249d
Reviewed-on: https://go-review.googlesource.com/c/go/+/482475
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
src/log/slog/example_test.go
src/log/slog/example_wrap_test.go

index 06a275064861c93bc3d2b24db8c837f8d6bf0f90..78b60b3649a99b667594b6669274f46afc13b2f0 100644 (file)
@@ -17,9 +17,7 @@ func ExampleGroup() {
        // ...
 
        logger := slog.New(slog.HandlerOptions{ReplaceAttr: slogtest.RemoveTime}.NewTextHandler(os.Stdout))
-       slog.SetDefault(logger)
-
-       slog.Info("finished",
+       logger.Info("finished",
                slog.Group("req",
                        slog.String("method", r.Method),
                        slog.String("url", r.URL.String())),
index 95a493400d665228df3af0ce6d7d74a2acb8ea46..1aad16dc5a14c1819101f77db394b59f935d1a88 100644 (file)
@@ -16,20 +16,17 @@ import (
 
 // Infof is an example of a user-defined logging function that wraps slog.
 // The log record contains the source position of the caller of Infof.
-func Infof(format string, args ...any) {
-       l := slog.Default()
-       if !l.Enabled(context.Background(), slog.LevelInfo) {
+func Infof(logger *slog.Logger, format string, args ...any) {
+       if !logger.Enabled(context.Background(), slog.LevelInfo) {
                return
        }
        var pcs [1]uintptr
        runtime.Callers(2, pcs[:]) // skip [Callers, Infof]
        r := slog.NewRecord(time.Now(), slog.LevelInfo, fmt.Sprintf(format, args...), pcs[0])
-       _ = l.Handler().Handle(context.Background(), r)
+       _ = logger.Handler().Handle(context.Background(), r)
 }
 
 func Example_wrapping() {
-       defer func(l *slog.Logger) { slog.SetDefault(l) }(slog.Default())
-
        replace := func(groups []string, a slog.Attr) slog.Attr {
                // Remove time.
                if a.Key == slog.TimeKey && len(groups) == 0 {
@@ -42,9 +39,8 @@ func Example_wrapping() {
                return a
        }
        logger := slog.New(slog.HandlerOptions{AddSource: true, ReplaceAttr: replace}.NewTextHandler(os.Stdout))
-       slog.SetDefault(logger)
-       Infof("message, %s", "formatted")
+       Infof(logger, "message, %s", "formatted")
 
        // Output:
-       // level=INFO source=example_wrap_test.go:46 msg="message, formatted"
+       // level=INFO source=example_wrap_test.go:42 msg="message, formatted"
 }