Zap / Logrus für Go: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in das Logging in Go: Zap und Logrus

\n\n

Logging ist eine kritische Komponente jeder ernsthaften Anwendung. Es ermöglicht die Überwachung des Programmzustands, die Erfassung von Fehlern, die Analyse der Leistung und das Debuggen von Code in der Produktionsumgebung. Die Standardbibliothek von Go enthält das Paket log, das jedoch nur über begrenzte Funktionen verfügt: Es gibt keine Log-Level (außer primitiven), keine strukturierte Ausgabe, keine flexiblen Formate. Zur Lösung dieser Probleme wurden zwei leistungsstarke Bibliotheken entwickelt: Zap (von Uber) und Logrus (einer der ersten populären Logger).

\n\n

In diesem Artikel werden wir beide Bibliotheken, ihre Methoden, Anwendungsbeispiele und Best Practices im Detail behandeln. Sie erfahren, wie Sie strukturiertes Logging einrichten, mit Log-Leveln arbeiten, Kontextfelder hinzufügen und typische Fehler vermeiden.

\n\n

Was ist Zap?

\n

Zap ist eine hochperformante Bibliothek für strukturiertes Logging von der Firma Uber. Sie ist auf Geschwindigkeit und minimale Speicherzuweisung ausgelegt. Zap unterstützt zwei Betriebsmodi: SugaredLogger (bequem, aber etwas langsamer) und Logger (maximale Leistung).

\n\n

Was ist Logrus?

\n

Logrus ist eine der ersten und beliebtesten Bibliotheken für Logging in Go. Sie bietet eine einfache API, Unterstützung für Log-Level, Formatierer (JSON, Text) und Hooks für die Integration mit externen Systemen (z. B. Sentry, Slack). Logrus ist einfacher zu erlernen, hat aber eine geringere Leistung als Zap.

\n\n

Installation

\n

Die Installation beider Bibliotheken erfolgt auf dem Standardweg über go get:

\n\n
// Installation von Zap\ngo get -u go.uber.org/zap\n\n// Installation von Logrus\ngo get -u github.com/sirupsen/logrus\n
\n\n

Nach der Installation können Sie sie in Ihr Projekt importieren:

\n\n
import (\n    "go.uber.org/zap"\n    "github.com/sirupsen/logrus"\n)\n
\n\n

Schnellstart mit Codebeispiel

\n\n

Beispiel mit Zap

\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    // Erstellen eines Production-Loggers (hohe Leistung)\n    logger, _ := zap.NewProduction()\n    defer logger.Sync() // Puffer vor Beendigung leeren\n\n    // Loggen einer Nachricht mit Feldern\n    logger.Info("Anwendung gestartet",\n        zap.String("version", "1.0.0"),\n        zap.Int("port", 8080),\n    )\n\n    // Verwenden des SugaredLoggers für Bequemlichkeit\n    sugar := logger.Sugar()\n    sugar.Infow("Benutzer hat sich angemeldet",\n        "user", "john_doe",\n        "ip", "192.168.1.1",\n    )\n}\n
\n\n

Beispiel mit Logrus

\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    // Konfigurieren des Ausgabeformats (JSON)\n    logrus.SetFormatter(&logrus.JSONFormatter{})\n\n    // Festlegen des Log-Levels\n    logrus.SetLevel(logrus.InfoLevel)\n\n    // Loggen einer Nachricht mit Feldern\n    logrus.WithFields(logrus.Fields{\n        "version": "1.0.0",\n        "port":    8080,\n    }).Info("Anwendung gestartet")\n\n    // Loggen eines Fehlers\n    logrus.WithFields(logrus.Fields{\n        "user": "john_doe",\n        "ip":   "192.168.1.1",\n    }).Warn("Anmeldeversuch mit falschem Passwort")\n}\n
\n\n

Wichtige Methoden und Funktionen

\n\n

1. Zap: NewProduction() / NewDevelopment()

\n

Was es tut: Erstellt einen vorkonfigurierten Logger für die Produktions- oder Entwicklungsumgebung. Der Production-Logger verwendet das JSON-Format und ist für Geschwindigkeit optimiert. Der Development-Logger verwendet eine farbige Textausgabe und enthält Stacktraces.

\n

Parameter: Keine (gibt *zap.Logger und einen Fehler zurück).

\n

Beispiel:

\n
prodLogger, _ := zap.NewProduction()\ndevLogger, _ := zap.NewDevelopment()\n
\n\n

2. Zap: Logger.Info(),

Empfehlungen