Ce face slog.SetDefault
slog.SetDefault înlocuiește logger-ul global. După apel, slog.Info, slog.Warn și celelalte funcții de pachet scriu prin logger-ul dat. Se apelează o dată, la începutul lui main.
Efect important: și pachetul vechi log este redirecționat. log.Println("x") devine un mesaj de nivel INFO în formatul handler-ului ales, deci bibliotecile care folosesc log ajung în același jurnal.
Parametri
| Parametru | Descriere |
|---|---|
l |
Logger-ul care devine implicit. |
Ce returnează
Nimic. slog.Default() returnează logger-ul implicit curent.
Exemple
Exemplul 1: Configurare la pornire
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.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: faraTimp})))
slog.Info("server pornit", "port", 8080)
salveaza()
}
func salveaza() {
slog.Info("date salvate", "inregistrari", 37) // folosește tot logger-ul implicit
}
Rezultat
{"level":"INFO","msg":"server pornit","port":8080}
{"level":"INFO","msg":"date salvate","inregistrari":37}
Exemplul 2: Și pachetul log trece prin slog
package main
import (
"log"
"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})))
log.Println("mesaj scris cu pachetul log vechi")
log.Printf("comanda %d procesată", 1042)
}
Rezultat
level=INFO msg="mesaj scris cu pachetul log vechi"
level=INFO msg="comanda 1042 procesată"
Greșeli frecvente
- Apelezi
SetDefaultdin mai multe locuri (biblioteci, teste). Doar aplicația, înmain, ar trebui să aleagă jurnalul implicit.
Comenzi înrudite
slog.New: Creează un *slog.Logger care trimite mesajele unui handler (text, JSON sau propriu).slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.log.Println: Scrie un mesaj în jurnal, precedat de dată și oră; Println pune spații între valori, Print ca fmt.Print.