slog.Level în Go

Tipul nivelului unui mesaj (DEBUG, INFO, WARN, ERROR); valorile mai mari înseamnă mesaje mai importante.

Sintaxă
type Level int

const (
    LevelDebug Level = -4
    LevelInfo  Level = 0
    LevelWarn  Level = 4
    LevelError Level = 8
)

Ce face slog.Level

slog.Level este un număr întreg. Constantele standard sunt LevelDebug (-4), LevelInfo (0), LevelWarn (4) și LevelError (8). Un handler afișează doar mesajele cu nivelul mai mare sau egal cu nivelul lui minim.

Spațiul dintre constante permite niveluri proprii: slog.LevelError + 4 se afișează ca ERROR+4, iar slog.Level(2) ca INFO+2. Pentru un nivel care se poate schimba în timp ce programul rulează (de exemplu dintr-un endpoint de administrare), folosește slog.LevelVar.

Ce returnează

Nu se aplică (este un tip). Level.String() returnează numele afișat.

Exemple

Exemplul 1: Valorile și numele nivelurilor

package main

import (
    "fmt"
    "log/slog"
)

func main() {
    for _, l := range []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError, slog.Level(2), slog.LevelError + 4} {
        fmt.Printf("%3d %s\n", int(l), l)
    }
    var l slog.Level
    err := l.UnmarshalText([]byte("warn"))
    fmt.Println("din text:", l, err)
}

Rezultat

 -4 DEBUG
  0 INFO
  4 WARN
  8 ERROR
  2 INFO+2
 12 ERROR+4
din text: WARN <nil>

Exemplul 2: Nivel schimbat în timpul rulării cu LevelVar

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() {
    var nivel slog.LevelVar // implicit INFO
    logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: &nivel, ReplaceAttr: faraTimp}))

    logger.Debug("nu apare")
    nivel.Set(slog.LevelDebug) // de exemplu, la o cerere de administrare
    logger.Debug("acum apare", "nivel", nivel.Level())
    nivel.Set(slog.LevelError)
    logger.Warn("nu mai apare")
    logger.Error("doar erorile")
}

Rezultat

level=DEBUG msg="acum apare" nivel=DEBUG
level=ERROR msg="doar erorile"

Greșeli frecvente

  • Compari nivelurile ca text. Ele sunt numere: if nivel >= slog.LevelWarn.

Comenzi înrudite

  • slog.HandlerOptions: Opțiunile handler-elor text și JSON: nivelul minim, adăugarea fișierului sursă și modificarea oricărui atribut.
  • slog.Debug: Scrie un mesaj de nivel DEBUG, cu detalii pentru depanare; implicit aceste mesaje nu sunt afișate.
  • slog.Logger: Tipul jurnalului structurat: are metodele Debug, Info, Warn, Error, Log și creează loggeri derivați cu With.