slog.Debug în Go

Scrie un mesaj de nivel DEBUG, cu detalii pentru depanare; implicit aceste mesaje nu sunt afișate.

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

Ce face slog.Debug

slog.Debug este pentru detalii utile doar când cauți o problemă: valori intermediare, pașii unui algoritm, cereri trimise. Nivelul minim implicit al handler-elor este INFO, deci mesajele DEBUG sunt ignorate până când cobori nivelul cu HandlerOptions{Level: slog.LevelDebug}.

Un tipar comun: nivelul se alege dintr-o opțiune de linie de comandă (-debug) sau dintr-o variabilă de mediu, fără să schimbi codul.

Parametri

Parametru Descriere
msg Mesajul.
args Perechi cheie, valoare.

Ce returnează

Nimic.

Exemple

Exemplul 1: Mesajele DEBUG sunt ascunse implicit

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})))
    slog.Debug("calculez reducerea", "total", 640)
    slog.Info("reducere aplicată", "procent", 10)
}

Rezultat

level=INFO msg="reducere aplicată" procent=10

Exemplul 2: Nivel ales dintr-o variabilă de mediu

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() {
    os.Setenv("DEBUG", "1") // în practică: DEBUG=1 ./program

    nivel := slog.LevelInfo
    if os.Getenv("DEBUG") == "1" {
        nivel = slog.LevelDebug
    }
    opt := &slog.HandlerOptions{Level: nivel, ReplaceAttr: faraTimp}
    slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, opt)))

    slog.Debug("calculez reducerea", "total", 640)
    slog.Info("reducere aplicată", "procent", 10)
}

Rezultat

level=DEBUG msg="calculez reducerea" total=640
level=INFO msg="reducere aplicată" procent=10

Greșeli frecvente

  • Calculezi valori costisitoare doar pentru un mesaj DEBUG care oricum nu se afișează. Verifică întâi cu logger.Enabled(ctx, slog.LevelDebug) sau folosește un slog.LogValuer, evaluat doar când e nevoie.

Comenzi înrudite

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