Ce face slog.NewTextHandler
slog.NewTextHandler scrie mesajele în formatul time=... level=INFO msg="..." cheie=valoare, ușor de citit de oameni și de unelte ca Loki sau grep. Valorile care conțin spații, ghilimele sau = sunt puse între ghilimele; datele (time.Time) sunt scrise în format RFC 3339 cu milisecunde, duratele ca 1.5s.
Al doilea argument, opts, poate fi nil (setări implicite: nivel minim INFO, fără sursă) sau un *slog.HandlerOptions cu nivelul, sursa și funcția ReplaceAttr.
Parametri
| Parametru | Descriere |
|---|---|
w |
Destinația (os.Stdout, os.Stderr, un fișier). |
opts |
Opțiunile sau nil. |
Ce returnează
Un *slog.TextHandler, pe care îl dai lui slog.New.
Exemple
Exemplul 1: Cum arată formatul text
Aici păstrăm și ora, dar setată fix prin ReplaceAttr, ca să vezi formatul ei.
package main
import (
"log/slog"
"os"
"time"
)
func main() {
oraFixa := func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey {
return slog.Time(slog.TimeKey, time.Date(2025, 3, 14, 10, 30, 0, 0, time.UTC))
}
return a
}
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: oraFixa}))
logger.Info("livrare programată",
"client", "Ana Popescu",
"oras", "Iași",
"colete", 2,
"durata", 90*time.Minute,
"nota", `a spus "sunați înainte"`)
}
Rezultat
time=2025-03-14T10:30:00.000Z level=INFO msg="livrare programată" client="Ana Popescu" oras=Iași colete=2 durata=1h30m0s nota="a spus \"sunați înainte\""
Exemplul 2: Cu nivel minim DEBUG
Opțiunea Level coboară nivelul minim; fără ea, mesajul DEBUG nu ar apărea. Opțiunea AddSource este arătată pe pagina slog.HandlerOptions.
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{Level: slog.LevelDebug, ReplaceAttr: faraTimp}
logger := slog.New(slog.NewTextHandler(os.Stdout, opt))
logger.Debug("cache golit", "intrari", 120)
logger.Info("cache reconstruit", "intrari", 98)
}
Rezultat
level=DEBUG msg="cache golit" intrari=120
level=INFO msg="cache reconstruit" intrari=98
Greșeli frecvente
- Parsezi formatul text cu
strings.Split(rand, " "). Valorile între ghilimele pot conține spații; dacă jurnalul e citit de programe, preferă JSON.
Comenzi înrudite
slog.NewJSONHandler: Creează un handler care scrie fiecare mesaj ca un obiect JSON pe un rând, potrivit pentru servere și cloud.slog.HandlerOptions: Opțiunile handler-elor text și JSON: nivelul minim, adăugarea fișierului sursă și modificarea oricărui atribut.slog.New: Creează un *slog.Logger care trimite mesajele unui handler (text, JSON sau propriu).