mirror of
https://github.com/golang/go
synced 2024-11-26 09:58:04 -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 ErrorCtx(context.Context, string, ...interface{}) #56345
|
||||||
pkg log/slog, func Float64(string, float64) Attr #56345
|
pkg log/slog, func Float64(string, float64) Attr #56345
|
||||||
pkg log/slog, func Float64Value(float64) Value #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 GroupValue(...Attr) Value #56345
|
||||||
pkg log/slog, func Info(string, ...interface{}) #56345
|
pkg log/slog, func Info(string, ...interface{}) #56345
|
||||||
pkg log/slog, func InfoCtx(context.Context, 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.
|
// Group returns an Attr for a Group Value.
|
||||||
// The caller must not subsequently mutate the
|
// The first argument is the key; the remaining arguments
|
||||||
// argument slice.
|
// 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
|
// key on a log line, or as the result of LogValue
|
||||||
// in order to log a single value as multiple Attrs.
|
// in order to log a single value as multiple Attrs.
|
||||||
func Group(key string, as ...Attr) Attr {
|
func Group(key string, args ...any) Attr {
|
||||||
return Attr{key, GroupValue(as...)}
|
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.
|
// 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.
|
[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.
|
[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.Group("request",
|
||||||
slog.String("method", r.Method),
|
"method", r.Method,
|
||||||
slog.Any("url", r.URL))
|
"url", r.URL)
|
||||||
|
|
||||||
TextHandler would display this group as
|
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
|
// The new Logger's handler is the result of calling WithAttrs on the receiver's
|
||||||
// handler.
|
// handler.
|
||||||
func (l *Logger) With(args ...any) *Logger {
|
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 := l.clone()
|
||||||
c.handler = l.handler.WithAttrs(attrs)
|
c.handler = l.handler.WithAttrs(argsToAttrSlice(args))
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user