Ce face slog.New
În slog, Logger-ul este partea pe care o apelezi (Info, Warn, With), iar Handler-ul decide formatul și destinația. slog.New(h) leagă cele două.
Handler-ele din biblioteca standard sunt slog.NewTextHandler (cheie=valoare) și slog.NewJSONHandler (un obiect JSON pe rând). Poți avea mai mulți loggeri cu handler-e diferite sau poți face unul dintre ei implicit cu slog.SetDefault.
Parametri
| Parametru | Descriere |
|---|---|
h |
Handler-ul; nu poate fi nil. |
Ce returnează
Un *slog.Logger nou.
Exemple
Exemplul 1: Doi loggeri, două formate
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}
text := slog.New(slog.NewTextHandler(os.Stdout, opt))
json := slog.New(slog.NewJSONHandler(os.Stdout, opt))
text.Info("factură emisă", "nr", 1042, "client", "Ana")
json.Info("factură emisă", "nr", 1042, "client", "Ana")
}
Rezultat
level=INFO msg="factură emisă" nr=1042 client=Ana
{"level":"INFO","msg":"factură emisă","nr":1042,"client":"Ana"}
Exemplul 2: Logger transmis unei componente
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
}
type Mailer struct {
log *slog.Logger
}
func (m Mailer) Trimite(catre, subiect string) {
m.log.Info("e-mail trimis", "catre", catre, "subiect", subiect)
}
func main() {
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp}))
m := Mailer{log: logger.With("componenta", "mailer")}
m.Trimite("ana@exemplu.ro", "Comanda ta a fost expediată")
}
Rezultat
level=INFO msg="e-mail trimis" componenta=mailer catre=ana@exemplu.ro subiect="Comanda ta a fost expediată"
Greșeli frecvente
- Apelezi
slog.New(nil): programul se oprește cu panică.
Comenzi înrudite
slog.NewTextHandler: Creează un handler care scrie fiecare mesaj ca un rând de perechi cheie=valoare (format logfmt).slog.NewJSONHandler: Creează un handler care scrie fiecare mesaj ca un obiect JSON pe un rând, potrivit pentru servere și cloud.slog.SetDefault: Face un logger jurnalul implicit, folosit de slog.Info, slog.Error etc. și de pachetul log.slog.Logger: Tipul jurnalului structurat: are metodele Debug, Info, Warn, Error, Log și creează loggeri derivați cu With.