Log-Level und Attribute
Logs um Kontext ergänzen
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.Groupverschachtelt Felder;logger.Withverwendet gemeinsamen KontextLevelVarermöglicht Änderungen des Levels zur Laufzeit
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
- Warum strukturierte Logs?
- slog-Handler
- Log-Level und Attribute
- Benutzerdefinierte Handler