]> Cypherpunks repositories - gostls13.git/commitdiff
log/slog: make examples playable
authorXin Hao <haoxinst@gmail.com>
Sun, 6 Apr 2025 16:29:46 +0000 (16:29 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 7 Apr 2025 16:34:01 +0000 (09:34 -0700)
Fixes #69246

Change-Id: I8e59132980404ee58ba2ca8718dd9f68404fdf8d
GitHub-Last-Rev: f59d3fad2002cda69a24789f2fdd4e9753cede9c
GitHub-Pull-Request: golang/go#69249
Reviewed-on: https://go-review.googlesource.com/c/go/+/610535
Reviewed-by: Sean Liao <sean@liao.dev>
Auto-Submit: Sean Liao <sean@liao.dev>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
src/log/slog/example_discard_test.go
src/log/slog/example_level_handler_test.go
src/log/slog/example_log_level_test.go
src/log/slog/example_logvaluer_secret_test.go
src/log/slog/internal/slogtest/slogtest.go [deleted file]

index 3e3e37b18909089c3b8f57c7a2ea985f5ff95bb4..7b829df181ec5880d7d014b45046f090fac22535 100644 (file)
@@ -6,15 +6,20 @@ package slog_test
 
 import (
        "log/slog"
-       "log/slog/internal/slogtest"
        "os"
 )
 
 func Example_discardHandler() {
+       removeTime := func(groups []string, a slog.Attr) slog.Attr {
+               if a.Key == slog.TimeKey && len(groups) == 0 {
+                       return slog.Attr{}
+               }
+               return a
+       }
        // A slog.TextHandler can output log messages.
        logger1 := slog.New(slog.NewTextHandler(
                os.Stdout,
-               &slog.HandlerOptions{ReplaceAttr: slogtest.RemoveTime},
+               &slog.HandlerOptions{ReplaceAttr: removeTime},
        ))
        logger1.Info("message 1")
 
index 1ff91d47635faa37454bb9baff81d0d5e9e0aafe..97b2f3abda43187501d856d0a270ee8d6d130b70 100644 (file)
@@ -7,7 +7,6 @@ package slog_test
 import (
        "context"
        "log/slog"
-       "log/slog/internal/slogtest"
        "os"
 )
 
@@ -63,7 +62,13 @@ func (h *LevelHandler) Handler() slog.Handler {
 // Another typical use would be to decrease the log level (to LevelDebug, say)
 // during a part of the program that was suspected of containing a bug.
 func ExampleHandler_levelHandler() {
-       th := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: slogtest.RemoveTime})
+       removeTime := func(groups []string, a slog.Attr) slog.Attr {
+               if a.Key == slog.TimeKey && len(groups) == 0 {
+                       return slog.Attr{}
+               }
+               return a
+       }
+       th := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: removeTime})
        logger := slog.New(NewLevelHandler(slog.LevelWarn, th))
        logger.Info("not printed")
        logger.Warn("printed")
index ca8db416e5cdfb491b5a8c6c93847f6549da3b62..258851b762972fe90d838fadbb96306c3b95ca75 100644 (file)
@@ -7,7 +7,6 @@ package slog_test
 import (
        "log"
        "log/slog"
-       "log/slog/internal/slogtest"
        "os"
 )
 
@@ -49,7 +48,13 @@ func ExampleSetLogLoggerLevel_slog() {
        defer slog.SetLogLoggerLevel(currentLogLevel) // revert changes after the example
 
        defer slog.SetDefault(slog.Default()) // revert changes after the example
-       slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: slogtest.RemoveTime})))
+       removeTime := func(groups []string, a slog.Attr) slog.Attr {
+               if a.Key == slog.TimeKey && len(groups) == 0 {
+                       return slog.Attr{}
+               }
+               return a
+       }
+       slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: removeTime})))
 
        log.Print("error") // level=ERROR msg=error
 
index 51d002079383a5639bfe95f4f60930e73ef07b22..da4c123617eca35da09543dcbf0b45e0976bd3d2 100644 (file)
@@ -6,7 +6,6 @@ package slog_test
 
 import (
        "log/slog"
-       "log/slog/internal/slogtest"
        "os"
 )
 
@@ -23,7 +22,13 @@ func (Token) LogValue() slog.Value {
 // with an alternative representation to avoid revealing secrets.
 func ExampleLogValuer_secret() {
        t := Token("shhhh!")
-       logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: slogtest.RemoveTime}))
+       removeTime := func(groups []string, a slog.Attr) slog.Attr {
+               if a.Key == slog.TimeKey && len(groups) == 0 {
+                       return slog.Attr{}
+               }
+               return a
+       }
+       logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: removeTime}))
        logger.Info("permission granted", "user", "Perry", "token", t)
 
        // Output:
diff --git a/src/log/slog/internal/slogtest/slogtest.go b/src/log/slog/internal/slogtest/slogtest.go
deleted file mode 100644 (file)
index d587662..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package slogtest contains support functions for testing slog.
-package slogtest
-
-import "log/slog"
-
-// RemoveTime removes the top-level time attribute.
-// It is intended to be used as a ReplaceAttr function,
-// to make example output deterministic.
-func RemoveTime(groups []string, a slog.Attr) slog.Attr {
-       if a.Key == slog.TimeKey && len(groups) == 0 {
-               return slog.Attr{}
-       }
-       return a
-}