slog.Warn în Go

Scrie în jurnalul implicit un mesaj de nivel WARN: ceva neobișnuit, dar programul continuă normal.

Sintaxă
func Warn(msg string, args ...any)

Ce face slog.Warn

slog.Warn funcționează ca slog.Info, dar cu nivelul WARN. Îl folosești pentru situații care merită atenție, fără să fie erori: o operație a reușit abia la a doua încercare, stocul este aproape gol, o setare veche este încă folosită.

Nivelul permite filtrarea: în producție poți afișa doar mesajele de la WARN în sus (vezi HandlerOptions.Level).

Parametri

Parametru Descriere
msg Mesajul.
args Perechi cheie, valoare.

Ce returnează

Nimic.

Exemple

Exemplul 1: Avertismente într-un magazin

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})))

    stoc := map[string]int{"cafea": 2, "ceai": 40}
    for _, produs := range []string{"cafea", "ceai"} {
        if stoc[produs] < 5 {
            slog.Warn("stoc aproape epuizat", "produs", produs, "ramas", stoc[produs])
        } else {
            slog.Info("stoc în regulă", "produs", produs, "ramas", stoc[produs])
        }
    }
}

Rezultat

level=WARN msg="stoc aproape epuizat" produs=cafea ramas=2
level=INFO msg="stoc în regulă" produs=ceai ramas=40

Exemplul 2: Doar avertismente și erori

Cu Level: slog.LevelWarn, mesajele INFO nu mai apar.

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.LevelWarn, ReplaceAttr: faraTimp}
    slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, opt)))

    slog.Info("cerere primită", "cale", "/produse")
    slog.Warn("răspuns lent", "cale", "/produse", "ms", 2300)
    slog.Error("baza de date nu răspunde", "incercari", 3)
}

Rezultat

level=WARN msg="răspuns lent" cale=/produse ms=2300
level=ERROR msg="baza de date nu răspunde" incercari=3

Greșeli frecvente

  • Scrii totul ca Warn ca să fie „văzut”. Dacă jurnalul e plin de avertismente, nimeni nu le mai citește; păstrează WARN pentru situații care cer atenție.

Comenzi înrudite

  • slog.Info: Scrie în jurnalul structurat implicit un mesaj de nivel INFO, cu perechi cheie-valoare.
  • slog.Error: Scrie în jurnalul implicit un mesaj de nivel ERROR, de obicei împreună cu eroarea primită.
  • slog.Level: Tipul nivelului unui mesaj (DEBUG, INFO, WARN, ERROR); valorile mai mari înseamnă mesaje mai importante.
  • slog.HandlerOptions: Opțiunile handler-elor text și JSON: nivelul minim, adăugarea fișierului sursă și modificarea oricărui atribut.