]> Cypherpunks.ru repositories - gostls13.git/commit
log/slog: add Source type for source location
authorJonathan Amsterdam <jba@google.com>
Fri, 7 Apr 2023 13:52:56 +0000 (09:52 -0400)
committerJonathan Amsterdam <jba@google.com>
Thu, 20 Apr 2023 17:36:42 +0000 (17:36 +0000)
commitbdccb85f509d24789694df198fe7bde948aa7955
treed41796ddc08e58b5ca138f42f3d54b55b5c3ab50
parentd22f287f12f4782082cd93785ad91e78dbe0d4d6
log/slog: add Source type for source location

Add a struct called Source that holds the function, file and line
of a location in the program's source code.

When HandleOptions.AddSource is true, the ReplaceAttr function will
get an Attr whose key is SourceKey and whose value is a *Source.

We use *Source instead of Source to save an allocation. The pointer
and the value each cause one allocation up front: the pointer when it
is created, and the value when it is assigned to the `any` field of a
slog.Value (handle.go:283). If a ReplaceAttr function wanted to modify
a Source value, it would have to create a new slog.Value to return,
causing a second allocation, but the function can modify a *Source in
place.

TextHandler displays a Source as "file:line".

JSONHandler displays a Source as a group of its non-zero fields.

This replaces the previous design, where source location was always a
string with the format "file:line". The new design gives users more
control over how to output and consume source locations.

Fixes #59280.

Change-Id: I84475abd5ed83fc354b50e34325c7b246cf327c7
Reviewed-on: https://go-review.googlesource.com/c/go/+/486376
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
api/next/59280.txt [new file with mode: 0644]
src/log/slog/example_wrap_test.go
src/log/slog/handler.go
src/log/slog/handler_test.go
src/log/slog/logger_test.go
src/log/slog/record.go
src/log/slog/record_test.go
src/log/slog/text_handler_test.go