log.Printf("failed to frob %s: %s", thing, error)
Wouldn't you just want to use slog.Error("failed to frob", thing, error)
That keeps the _value_ of `thing` as the key and the _value_ of `error` as the value. That would keep more in line with your first example.