diff options
| author | Ernesto Alejandro Santana Hidalgo <ernesto.alejandrosantana@gmail.com> | 2025-05-04 04:30:25 +0000 |
|---|---|---|
| committer | Jonathan Amsterdam <jba@google.com> | 2025-05-06 03:58:07 -0700 |
| commit | 044ca4e5c878c785e2c69e5ebcb3d44bf97abc9f (patch) | |
| tree | 39ad811b9de590fb703e152ee5e43ad92964ac11 /src/log/slog/handler_test.go | |
| parent | 35b4fd9f373cbe13778eb259a19c496c9c613a1f (diff) | |
| download | go-044ca4e5c878c785e2c69e5ebcb3d44bf97abc9f.tar.xz | |
log/slog: export Source method in Record for custom handler support
Currently, the `source` method in `slog.Record` is not accessible to
custom handlers, requiring developers to re-implement logic for
retrieving source location information. This commit exports the `source`
method as `Source`, enabling consistent access for custom logging
handlers and reducing code redundancy.
Fixes #70280
Change-Id: I3eb3bc60658abc5de95697a10bddd11ab54c6e13
GitHub-Last-Rev: bd81afe5a502bf0e2d03c30d0f5199a532cc4c62
GitHub-Pull-Request: golang/go#70281
Reviewed-on: https://go-review.googlesource.com/c/go/+/626976
Reviewed-by: qiu laidongfeng2 <2645477756@qq.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/log/slog/handler_test.go')
| -rw-r--r-- | src/log/slog/handler_test.go | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/log/slog/handler_test.go b/src/log/slog/handler_test.go index 9f8d518e96..445f43f1f5 100644 --- a/src/log/slog/handler_test.go +++ b/src/log/slog/handler_test.go @@ -547,7 +547,11 @@ func TestJSONAndTextHandlers(t *testing.T) { }, } { r := NewRecord(testTime, LevelInfo, "message", callerPC(2)) - line := strconv.Itoa(r.source().Line) + source := r.Source() + if source == nil { + t.Fatal("source is nil") + } + line := strconv.Itoa(source.Line) r.AddAttrs(test.attrs...) var buf bytes.Buffer opts := HandlerOptions{ReplaceAttr: test.replace, AddSource: test.addSource} @@ -634,6 +638,40 @@ func TestHandlerEnabled(t *testing.T) { } } +func TestJSONAndTextHandlersWithUnavailableSource(t *testing.T) { + // Verify that a nil source does not cause a panic. + // and that the source is empty. + var buf bytes.Buffer + opts := &HandlerOptions{ + ReplaceAttr: removeKeys(LevelKey), + AddSource: true, + } + + for _, test := range []struct { + name string + h Handler + want string + }{ + {"text", NewTextHandler(&buf, opts), "source=:0 msg=message"}, + {"json", NewJSONHandler(&buf, opts), `{"msg":"message"}`}, + } { + t.Run(test.name, func(t *testing.T) { + buf.Reset() + r := NewRecord(time.Time{}, LevelInfo, "message", 0) + err := test.h.Handle(t.Context(), r) + if err != nil { + t.Fatal(err) + } + + want := strings.TrimSpace(test.want) + got := strings.TrimSpace(buf.String()) + if got != want { + t.Errorf("\ngot %s\nwant %s", got, want) + } + }) + } +} + func TestSecondWith(t *testing.T) { // Verify that a second call to Logger.With does not corrupt // the original. |
