mirror of
https://github.com/golang/go
synced 2024-11-22 20:04:47 -07:00
log/slog: Group takes ...any
The Group function takes a key and a ...any, which is converted into attrs. Fixes #59204. Change-Id: Ib714365dcda2eda37863ce433f3dd8cf5eeda610 Reviewed-on: https://go-review.googlesource.com/c/go/+/487855 Reviewed-by: Alan Donovan <adonovan@google.com> Run-TryBot: Jonathan Amsterdam <jba@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
79723f389b
commit
2f5f231ac1
@ -47,7 +47,6 @@ pkg log/slog, func Error(string, ...interface{}) #56345
|
||||
pkg log/slog, func ErrorCtx(context.Context, string, ...interface{}) #56345
|
||||
pkg log/slog, func Float64(string, float64) Attr #56345
|
||||
pkg log/slog, func Float64Value(float64) Value #56345
|
||||
pkg log/slog, func Group(string, ...Attr) Attr #56345
|
||||
pkg log/slog, func GroupValue(...Attr) Value #56345
|
||||
pkg log/slog, func Info(string, ...interface{}) #56345
|
||||
pkg log/slog, func InfoCtx(context.Context, string, ...interface{}) #56345
|
||||
|
1
api/next/59204.txt
Normal file
1
api/next/59204.txt
Normal file
@ -0,0 +1 @@
|
||||
pkg log/slog, func Group(string, ...interface{}) Attr #59204
|
@ -58,14 +58,26 @@ func Duration(key string, v time.Duration) Attr {
|
||||
}
|
||||
|
||||
// Group returns an Attr for a Group Value.
|
||||
// The caller must not subsequently mutate the
|
||||
// argument slice.
|
||||
// The first argument is the key; the remaining arguments
|
||||
// are converted to Attrs as in [Logger.Log].
|
||||
//
|
||||
// Use Group to collect several Attrs under a single
|
||||
// Use Group to collect several key-value pairs under a single
|
||||
// key on a log line, or as the result of LogValue
|
||||
// in order to log a single value as multiple Attrs.
|
||||
func Group(key string, as ...Attr) Attr {
|
||||
return Attr{key, GroupValue(as...)}
|
||||
func Group(key string, args ...any) Attr {
|
||||
return Attr{key, GroupValue(argsToAttrSlice(args)...)}
|
||||
}
|
||||
|
||||
func argsToAttrSlice(args []any) []Attr {
|
||||
var (
|
||||
attr Attr
|
||||
attrs []Attr
|
||||
)
|
||||
for len(args) > 0 {
|
||||
attr, args = argsToAttr(args)
|
||||
attrs = append(attrs, attr)
|
||||
}
|
||||
return attrs
|
||||
}
|
||||
|
||||
// Any returns an Attr for the supplied value.
|
||||
|
@ -164,11 +164,11 @@ How this qualification is displayed depends on the handler.
|
||||
[TextHandler] separates the group and attribute names with a dot.
|
||||
[JSONHandler] treats each group as a separate JSON object, with the group name as the key.
|
||||
|
||||
Use [Group] to create a Group Attr from a name and a list of Attrs:
|
||||
Use [Group] to create a Group Attr from a name and a list of key-value pairs:
|
||||
|
||||
slog.Group("request",
|
||||
slog.String("method", r.Method),
|
||||
slog.Any("url", r.URL))
|
||||
"method", r.Method,
|
||||
"url", r.URL)
|
||||
|
||||
TextHandler would display this group as
|
||||
|
||||
|
@ -95,16 +95,8 @@ func (l *Logger) Handler() Handler { return l.handler }
|
||||
// The new Logger's handler is the result of calling WithAttrs on the receiver's
|
||||
// handler.
|
||||
func (l *Logger) With(args ...any) *Logger {
|
||||
var (
|
||||
attr Attr
|
||||
attrs []Attr
|
||||
)
|
||||
for len(args) > 0 {
|
||||
attr, args = argsToAttr(args)
|
||||
attrs = append(attrs, attr)
|
||||
}
|
||||
c := l.clone()
|
||||
c.handler = l.handler.WithAttrs(attrs)
|
||||
c.handler = l.handler.WithAttrs(argsToAttrSlice(args))
|
||||
return c
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user