Jonathan Amsterdam bdccb85f50 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>
2023-04-20 17:36:42 +00:00
..
2023-03-29 20:41:09 +00:00
2023-03-11 05:07:02 +00:00
2023-03-13 21:58:46 +00:00
2023-03-16 16:44:21 +00:00
2023-01-24 22:06:45 +00:00
2023-04-07 22:25:51 +00:00
2023-01-30 16:00:58 +00:00
2023-04-18 20:34:36 +00:00
2023-03-21 20:55:33 +00:00
2023-02-15 21:56:30 +00:00
2023-03-29 22:12:20 +00:00
2023-02-03 04:37:17 +00:00
2023-02-02 19:39:34 +00:00
2023-02-13 21:00:42 +00:00
2023-02-03 18:22:53 +00:00
2023-02-02 16:40:29 +00:00
2023-04-19 19:13:01 +00:00
2023-04-11 19:40:45 +00:00