Go Academy · Lektion

Log-Level und Attribute

Logs um Kontext ergänzen

Lektion 3 von 413 Schritte

Log-Level und Attribute ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Kontext zu Logs hinzufügen

Eine reine Nachricht sagt Ihnen, was passiert ist; Attribute liefern die Details, die Logs verwertbar machen: welcher Benutzer, welche Anfrage und wie lange es gedauert hat.

Die vier Level

slog-Level, von der niedrigsten zur höchsten Schwere:

  • Debug (-4)
  • Info (0)
  • Warn (4)
  • Error (8)

Level sind Ganzzahlen, daher können Sie eigene Level dazwischen definieren.

Nach Level filtern

Legen Sie in den HandlerOptions ein Mindestlevel fest. Datensätze darunter werden ohne großen Aufwand verworfen.

package main

import (
    "log/slog"
    "os"
)

func main() {
    opts := &slog.HandlerOptions{Level: slog.LevelWarn}
    logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
    logger.Info("ignored")
    logger.Warn("shown")
}

Typisierte Attribute

Neben losen Schlüssel-Wert-Argumenten bietet slog typisierte Konstruktoren, die Fehler vermeiden und schneller sind:

  • slog.String("k", v)
  • slog.Int("k", v)
  • slog.Bool("k", v)
  • slog.Duration("k", d)
slog.Info("done", slog.String("phase", "build"), slog.Int("files", 12))

Warum typisierte Attribute

Typisierte Attribute verhindern den Fehler „ungerade Anzahl von Argumenten“ bereits zur Compilezeit und ermöglichen es dem Handler, auf Reflection zu verzichten. Bevorzugen Sie sie in Hot Paths.

Attribute gruppieren

slog.Group verschachtelt zusammengehörige Felder unter einem Schlüssel.

slog.Info("req",
    slog.Group("http",
        slog.String("method", "GET"),
        slog.Int("status", 200),
    ),
)

Logger.With für gemeinsamen Kontext

logger.With(...) gibt einen untergeordneten Logger zurück, der dieselben Attribute an jede Nachricht anhängt. Das ist ideal für eine Request-ID.

reqLog := logger.With("requestID", "abc-123")
reqLog.Info("started")
reqLog.Info("finished")

Kontextbezogenes Logging

Die Varianten mit *Context (z. B. InfoContext) führen einen context.Context mit und ermöglichen es Handlern, Trace-IDs auszulesen.

slog.InfoContext(ctx, "handling", "path", "/api")

Dynamische Level

Verwenden Sie ein slog.LevelVar, um das Level zur Laufzeit zu ändern (z. B. bei der Untersuchung eines Vorfalls vorübergehend auf Debug zu erhöhen), ohne die Anwendung neu zu starten.

var lvl slog.LevelVar
lvl.Set(slog.LevelInfo)
h := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: &lvl})
// later: lvl.Set(slog.LevelDebug)

Fehler als Attribute

Fügen Sie Fehler als Attribute hinzu, damit sie abgefragt werden können, statt sie an die Nachricht anzuhängen.

slog.Error("save failed", slog.String("err", err.Error()), slog.Int("retry", 2))

Ausführbar: Level und With

Dieses Programm filtert nach Level und verwendet einen untergeordneten Logger mit gemeinsamem Kontext.

package main

import (
    "log/slog"
    "os"
)

func main() {
    opts := &slog.HandlerOptions{Level: slog.LevelInfo}
    base := slog.New(slog.NewTextHandler(os.Stdout, opts))
    req := base.With("requestID", "r-7")
    req.Debug("hidden")
    req.Info("processing", slog.Int("items", 3))
}

Schnelltest

Testen Sie Ihr Verständnis von Leveln und Attributen.

Zusammenfassung

Sie haben Level und Attribute kennengelernt:

  • Vier integrierte Level; filtern Sie mit HandlerOptions.Level
  • Typisierte Attribute (slog.String, slog.Int) sind sicherer und schneller
  • slog.Group verschachtelt Felder; logger.With verwendet gemeinsamen Kontext
  • LevelVar ermöglicht Änderungen des Levels zur Laufzeit
Kostenlos starten

Lerne Go mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Log-Level und Attribute“ kostenlos?

Ja — der vollständige Text von „Log-Level und Attribute“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Log-Level und Attribute“?

Logs um Kontext ergänzen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Log-Level und Attribute“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum strukturierte Logs?
  2. slog-Handler
  3. Log-Level und Attribute
  4. Benutzerdefinierte Handler
← Zurück zu Go Academy