Ce face slog.Logger.WithGroup
După l2 := logger.WithGroup("plata"), atributele date lui l2 (în apeluri sau prin With) apar sub grupul plata: plata.suma=... în text, "plata":{...} în JSON. Atributele adăugate înainte de WithGroup și câmpurile standard (level, msg) rămân în afara grupului.
Este util când dai un logger unei biblioteci sau componente: tot ce scrie ea ajunge într-un spațiu de nume propriu și nu se ciocnește cu restul.
Parametri
| Parametru | Descriere |
|---|---|
name |
Numele grupului. |
Ce returnează
Un *slog.Logger nou.
Exemple
Exemplul 1: Atributele unei componente într-un grup
package main
import (
"log/slog"
"os"
)
func faraTimp(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey && len(groups) == 0 {
return slog.Attr{} // un atribut gol nu este afișat
}
return a
}
func main() {
opt := &slog.HandlerOptions{ReplaceAttr: faraTimp}
for _, h := range []slog.Handler{slog.NewTextHandler(os.Stdout, opt), slog.NewJSONHandler(os.Stdout, opt)} {
logger := slog.New(h).With("cerere", "req-81c2")
plata := logger.WithGroup("plata")
plata.Info("plată autorizată", "suma", 249.9, "moneda", "RON")
}
}
Rezultat
level=INFO msg="plată autorizată" cerere=req-81c2 plata.suma=249.9 plata.moneda=RON
{"level":"INFO","msg":"plată autorizată","cerere":"req-81c2","plata":{"suma":249.9,"moneda":"RON"}}
Exemplul 2: Grupuri imbricate
package main
import (
"log/slog"
"os"
)
func faraTimp(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey && len(groups) == 0 {
return slog.Attr{} // un atribut gol nu este afișat
}
return a
}
func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp}))
db := logger.WithGroup("db").With("gazda", "localhost")
interogare := db.WithGroup("interogare")
interogare.Info("interogare lentă", "tabel", "comenzi", "ms", 840)
}
Rezultat
{"level":"INFO","msg":"interogare lentă","db":{"gazda":"localhost","interogare":{"tabel":"comenzi","ms":840}}}
Greșeli frecvente
- Te aștepți ca atributele adăugate cu
Withînainte deWithGroupsă intre în grup. Rămân în afara lui; ordinea apelurilor contează.
Comenzi înrudite
slog.Group: Grupează mai multe atribute sub un nume comun: în text devin grup.cheie=…, în JSON un obiect.slog.Logger.With: Returnează un logger nou care adaugă automat atributele date la fiecare mesaj.slog.Logger: Tipul jurnalului structurat: are metodele Debug, Info, Warn, Error, Log și creează loggeri derivați cu With.