Ce face slog.String
În loc de "oras", "Iași" poți scrie slog.String("oras", "Iași"). Rezultatul este un slog.Attr. Avantajele: compilatorul verifică tipul valorii, nu poți uita valoarea dintr-o pereche, iar handler-ul nu mai trebuie să ghicească tipul (puțin mai rapid).
Pentru alte tipuri există slog.Int64, slog.Uint64, slog.Float64, slog.Time, slog.Duration, slog.Any. Atributele și perechile simple pot fi amestecate în același apel.
Parametri
| Parametru | Descriere |
|---|---|
key |
Numele câmpului. |
value |
Valoarea, de tipul funcției. |
Ce returnează
Un slog.Attr.
Exemple
Exemplul 1: Atribute tipizate
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.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp}))
logger.Info("utilizator nou",
slog.String("nume", "Ioana Ionescu"),
slog.Int("varsta", 28),
slog.Bool("newsletter", true),
"oras", "Cluj-Napoca") // pereche simplă, amestecată
}
Rezultat
level=INFO msg="utilizator nou" nume="Ioana Ionescu" varsta=28 newsletter=true oras=Cluj-Napoca
Exemplul 2: Același mesaj în JSON
Tipurile se păstrează: numărul rămâne număr, booleanul rămâne boolean.
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}))
logger.Info("utilizator nou",
slog.String("nume", "Ioana Ionescu"),
slog.Int("varsta", 28),
slog.Bool("newsletter", true))
}
Rezultat
{"level":"INFO","msg":"utilizator nou","nume":"Ioana Ionescu","varsta":28,"newsletter":true}
Greșeli frecvente
- Dai un număr ca text:
slog.String("varsta", "28"). În JSON devine"28"și filtrele numerice nu mai merg; foloseșteslog.Int.
Comenzi înrudite
slog.Any: Creează un atribut cu o valoare de orice tip: structuri, liste, map-uri, erori.slog.Duration: Creează un atribut cu o durată (time.Duration): în text apare ca 1.5s, în JSON ca număr de nanosecunde.slog.Time: Creează un atribut cu o dată și oră (time.Time), scrisă în format RFC 3339.slog.Group: Grupează mai multe atribute sub un nume comun: în text devin grup.cheie=…, în JSON un obiect.slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.