Ce face slog.Error
slog.Error marchează o operație eșuată. Convenția este să pui eroarea ca atribut cu cheia "err" sau "eroare": slog.Error("salvare eșuată", "err", err). Handler-ul afișează textul erorii (err.Error()).
Spre deosebire de log.Fatal, slog.Error nu oprește programul: doar scrie mesajul. Tu decizi apoi dacă returnezi, reîncerci sau oprești.
Parametri
| Parametru | Descriere |
|---|---|
msg |
Mesajul. |
args |
Perechi cheie, valoare; de obicei și eroarea. |
Ce returnează
Nimic.
Exemple
Exemplul 1: Eroare cu context
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() {
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp})))
_, err := os.ReadFile("comenzi-martie.csv")
if err != nil {
slog.Error("nu pot citi comenzile", "fisier", "comenzi-martie.csv", "err", err)
}
slog.Info("programul continuă")
}
Rezultat
level=ERROR msg="nu pot citi comenzile" fisier=comenzi-martie.csv err="open comenzi-martie.csv: no such file or directory"
level=INFO msg="programul continuă"
Exemplul 2: Eroarea în format JSON
package main
import (
"errors"
"fmt"
"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
}
var ErrPlataRefuzata = errors.New("plata refuzată de bancă")
func main() {
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp})))
err := fmt.Errorf("comanda 1042: %w", ErrPlataRefuzata)
slog.Error("plată eșuată", "err", err, "suma", 249.9)
}
Rezultat
{"level":"ERROR","msg":"plată eșuată","err":"comanda 1042: plata refuzată de bancă","suma":249.9}
Greșeli frecvente
- Scrii eroarea și o și returnezi, iar funcția de deasupra o scrie din nou. Aceeași eroare apare de mai multe ori în jurnal; scrie-o o singură dată, unde o tratezi.
- Te aștepți ca
slog.Errorsă oprească programul. Nu o face; returnează sau ieși explicit.
Comenzi înrudite
slog.Warn: Scrie în jurnalul implicit un mesaj de nivel WARN: ceva neobișnuit, dar programul continuă normal.slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.slog.Any: Creează un atribut cu o valoare de orice tip: structuri, liste, map-uri, erori.log.Fatal: Scrie mesajul în jurnal și oprește imediat programul cu codul 1 (ca log.Print urmat de os.Exit(1)).