Logging in Go (Golang): Best Libraries and Solutions 2024

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

Logging für Go (Golang): Die besten Lösungen



Logging ist ein grundlegender Bestandteil jeder ernsthaften Anwendung. Im Go-Ökosystem (Golang) gibt es zahlreiche Bibliotheken, die jeweils ihren eigenen Kompromiss zwischen Leistung, Flexibilität und Benutzerfreundlichkeit bieten. In diesem Artikel betrachten wir die besten Lösungen für Logging in Go, angefangen bei der Standardbibliothek bis hin zu leistungsstarken Tools wie zerolog und zap.



Die Standardbibliothek: log



Go wird mit dem integrierten Paket log ausgeliefert. Es ist einfach, hat aber Einschränkungen: Keine Log-Level (Debug, Info, Warn, Error), keine Unterstützung für strukturierte Ausgabe (JSON) und minimale Formatierungsmöglichkeiten. Für kleinere Projekte oder schnelles Debugging ist es jedoch durchaus geeignet.



package main

import ( "log")

func main() { log.Println("Dies ist eine Informationsmeldung") log.Fatalln("Schwerwiegender Fehler, die Anwendung wird beendet")}


Vorteile: Keine Installation erforderlich, keine Abhängigkeiten.
Nachteile: Geringe Flexibilität, keine Log-Level, keine strukturierten Logs.



Logrus – Klassiker mit umfangreichen Funktionen



Logrus war lange Zeit der De-facto-Standard für Logging in Go. Es bietet Log-Level, Unterstützung für das JSON-Format und zahlreiche Hooks für die Integration mit externen Systemen (Logstash, Sentry usw.).



package main

import ( "github.com/sirupsen/logrus")

func main() { log := logrus.New() log.SetFormatter(&logrus.JSONFormatter{})

log.WithFields(logrus.Fields{ "user_id": 123, "action": "login", }).Info("Benutzer hat sich angemeldet")}


Vorteile: Reichhaltige API, viele Hooks, Unterstützung für strukturierte Logs.
Nachteile: Relativ geringe Leistung, große Binärdateigröße.



Zerolog – Hohe Leistung und null Allokationen



Zerolog (von den Entwicklern von RSocket) ist eine Bibliothek, die Leistung an erste Stelle setzt. Sie verwendet das Prinzip der „Zero Allocation“ (keine Speicherzuweisung) für heiße Pfade, was sie zu einer der schnellsten in Go macht. Zerolog ist ideal für Microservices und hochlastige Systeme.



package main

import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log")

func main() { // Konfiguration des globalen Loggers zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

log.Info(). Str("service", "auth"). Int("user_id", 456). Msg("Anfrage autorisiert")

// Fehlerprotokollierung err := someFunction() if err != nil { log.Error().Err(err).Msg("Vorgang konnte nicht ausgeführt werden") }}

func someFunction() error { return nil}


Vorteile: Rekordleistung, geringer Speicherverbrauch, einfache API.
Nachteile: Weniger flexibel als Logrus, erfordert Eingewöhnung an die verkettete Syntax.



Zap – Industriestandard von Uber



Zap (Zap Awesome Performance) wurde von Ingenieuren bei Uber entwickelt. Es bietet zwei Modi: SugaredLogger (bequem, aber mit geringem Overhead) und Logger (maximal schnell). Zap unterstützt strukturierte Logs, Log-Level und benutzerdefinierte Encoder.



package main

import ( "go.uber.org/zap")

func main() { // Logger erstellen (Production-Modus) logger, _ := zap.NewProduction() defer logger.Sync() // leert den Puffer, falls vorhanden

// SugaredLogger – bequeme Syntax sugar := logger.Sugar() sugar.Infow("Server gestartet", "port", 8080, "env", "production", )

// Logger – maximale Leistung logger.Info("Schlüsselereignis",

Empfehlungen