As mentioned in the article, Zap's SugaredLogger has roughly the same thing https://pkg.go.dev/go.uber.org/zap
sugar.Infow("failed to fetch URL",
"url", "http://example.com",
"attempt", 3,
"backoff", time.Second,
)
Really slog presents mostly the same two APIs as Zap, with a single entrypoint.`[level]w` supports both key/value pairs and individual `zap.Type(key, value)` values combined fwiw, so for that part the API is essentially the same too
Slog allows doing that by creating Attr structs directly.
You can reproduce that example with slog verbatim by changing zap to slog.
For example: https://pkg.go.dev/golang.org/x/exp/slog#example-Group
[1] https://github.com/uber-go/zap