Protokollierung ist die Technik, Aufzeichnungen für zukünftige Zwecke im Softwareentwicklungszyklus zu führen. Die Protokollierung ist von entscheidender Bedeutung, da Protokolle beim Debuggen, der Diagnose, der Fehlerbehebung und der Projektüberwachung helfen.

Sie können die Protokollierung auf verschiedenen Ebenen Ihrer Anwendungen für Fehler, Warnungen, Debugging und mehr verwenden.

Anmelden Los

Die Go-Standardbibliothek enthält ein Protokoll Paket mit vielen Funktionen. Es verarbeitet verschiedene Protokollierungsebenen und grundlegende protokollierungsbezogene Methoden, die Sie für Ihre Anwendung benötigen. Allerdings ist die Protokoll Paket ist möglicherweise nicht die beste Wahl, wenn Ihre App komplex ist und Sie der Produktivität Priorität einräumen möchten.

Das Protokoll -Paket bietet keine Funktionalität für strukturierte Protokolle. Strukturierte Protokollierungspakete bieten Funktionen, die den Protokollierungsprozess vereinfachen und verbessern. Das Go-Ökosystem beherbergt viele solcher Pakete.

1. Zap von Uber

Zap ist ein schnelles, strukturiertes, abgestuftes Protokollierungspaket, das vom Open-Source-Team von Uber zum Schreiben von Protokollen in Go entwickelt wurde. Über hat das Zap-Paket entwickelt, um eine leistungsfähigere Protokollierung als andere Pakete im Go-Ökosystem bereitzustellen, einschließlich des Protokoll Paket.

Es gibt zwei unterschiedliche Logger im Zap-Paket. Das Logger Funktion verarbeitet kritische Leistungsfälle. Das SugaredLogger bietet mit seiner API im printf-Stil mehr Flexibilität, ist jedoch mit einem kleinen Kompromiss bei der Leistung verbunden. Sogar das langsamere SugaredLogger-Paket ist 4-10 Mal schneller als andere strukturierte Protokollierungspakete.

Führen Sie Folgendes in einer Befehlszeile aus, um das Zap-Paket zu installieren:

gehen bekomme -u gehen.uber.org/zap

Sie benötigen eine aktuelle Version von Go, um die Funktionalität des Zap-Pakets erfolgreich zu installieren und zu verwenden.

Logger, äh := zap. NeueProduktion() // Zap-Logger-Instanz

wenn äh != Null {
fmt. Println (err. Fehler())
}

verschieben Logger. Synchronisieren() // Puffer leeren, falls vorhanden
Zucker := Logger. Zucker() // gezuckerter Logger hier

Zucker. Infow("URL konnte nicht abgerufen werden",
// Strukturierter Kontext als lose typisierte Schlüssel-Wert-Paare.
"URL", URL,
"versuchen", 3,
"Rückzug", Zeit. Zweite,
)

Zucker. Infof("URL konnte nicht abgerufen werden: %s", URL) // Verwenden des Formatierers im printf-Stil

Das Logger Variable ist eine Instanz von zappen Logger und die Zucker Methode ist eine Sugared-Logger-Instanz.

Das Infow -Methode schreibt in die Ausgabe, und die Infof ist die Formatierungsversion der Infow Methode.

2. Das Logrus-Paket

Logrus ist ein strukturiertes Protokollierungspaket für Go-Apps. Logrus ist mit dem Standardbibliotheks-Logger mit ähnlicher Funktionalität kompatibel. Wenn Sie Erfahrung mit der Verwendung haben Protokoll Paket finden Sie eine Suite, die mit Logrus funktioniert.

Logrus unterstützt standardmäßig keine JSON-Formatierung. Sie können jedoch jederzeit eine JSON-Bibliothek wie die integrierte verwenden json Paket mit Logrus’ SetFormatter Methode.

Logrus unterstützt die Protokollierung auf verschiedenen Ebenen und ist, obwohl es nicht so leistungsfähig ist wie die meisten Protokollierungspakete, funktionsreich und sicher.

Mit diesem Befehl können Sie Logrus in Ihrem Arbeitsverzeichnis installieren:

gehen Holen Sie sich github.com/sirupsen/logrus

Hier ist ein Beispiel für die Protokollierung mit dem Logrus-Paket.

importieren (
"os"
Log "github.com/sirupsen/logrus" // Alias-Import
)

Funkhauptsächlich {
Protokoll. SetFormatter(&log. JSONFormatter{}) // Formatierer auf JSON setzen
Protokoll. SetOutput (os. Stdout) // Ausgabe auf Standardausgabe
Protokoll. SetLevel (log. Warnstufe) // Warnstufe setzen

Protokoll. WithFields (log. Felder{
"Name": "John Doe",
"Das Alter": 40,
}).Info("Johns Biodaten")
}

Dieser Code importiert die Logrus-Bibliothek und erstellt einen Alias ​​namens Protokoll. In dem hauptsächlich Funktion, es ruft die auf SetFormatter -Methode zum Festlegen eines Formatierers für die Protokolle. Du kannst den... benutzen SetOutput Methode, um anzugeben, wohin Log-Meldungen gehen sollen; in diesem Fall Standardausgabe.

Das SetLevel -Methode protokolliert Warnungen auf der angegebenen Stufe oder höher.

3. ZeroLog-Paket

ZeroLog ist eine Zap-inspirierte, schnelle, JSON-dedizierte Bibliothek für die Protokollierung, die auf Leistung ausgelegt ist. Es verwendet eine einzigartige Verkettungs-API, die es Zerolog ermöglicht, JSON zu schreiben und Ereignisse ohne Zuordnungen und Reflexionen zu protokollieren.

Zerolog zielt darauf ab, eine benutzerfreundlichere API und eine höhere Leistung bereitzustellen, während die Codebasis und die API einfach gehalten werden. Es konzentriert sich auf die strukturierte Protokollierung und Sie können die verwenden ConsoleWriter Methode zum hübschen Anmelden auf Ihrer Konsole.

Das Zerolog-Paket bietet eine niedrige Zuordnung, gestaffelte Protokollierung, Stichproben, Hooks, Kontextfelder und Fehlerprotokollierung mit optionalen Stack-Trace-Funktionen. Sie können Zerolog auch mit integrieren Kontext und http Pakete.

Führen Sie diesen Befehl im Terminal Ihres Arbeitsbereichs aus, um die Zerolog Paket.

gehen get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)

Hier ist ein einfaches Beispiel für die Verwendung des Zerolog-Pakets für eine einfache Operation.

importieren (
"github.com/rs/zerolog" // Zerolog für Konfigurationen
"github.com/rs/zerolog/log" // Protokoll für die Protokollierung
)

Funkhauptsächlich() {
// UNIX-Zeit ist schneller und kleiner als die meisten Zeitstempel
nulllog. TimeFieldFormat = Nullprotokoll. ZeitFormatUnix

Protokoll. Drucken ("Hallo Welt")
}

Das TimeFieldFormat Option auf das Unix-Zeitformat eingestellt ist und die Drucken Der Befehl schreibt das Textargument in die Standardausgabe.

4. Das Log15-Paket

Das Log15 Paket ist ein einfaches, rechthaberisches Toolkit für menschen- und maschinenlesbares Logging mit Best Practices in Go. Log15 modelliert die io und http Pakete aus der Go-Standardbibliothek als Alternative zum integrierten Protokoll Paket.

Zu den Funktionen des Log15-Pakets gehören:

  • eine einfache, leicht verständliche API
  • strukturierte Protokollierung mit Schlüssel-Wert-Paaren
  • untergeordnete Logger mit privatem Kontext
  • Handler-Schnittstelle zum Erstellen benutzerdefinierter Protokollierungskonfigurationen über eine winzige API
  • farbige Terminalhalterung
  • integrierte Unterstützung für die Protokollierung in Dateien, Streams, Systemprotokollen und Netzwerkprotokollen
  • Puffern von Datensätzen zur Ausgabe.

Sie können installieren Log15 zu Ihren Go-Paketen mit diesem Befehl.

gehen Holen Sie sich github.com/inconshreveable/log15

Mit dem Log15-Paket ist der Einstieg ganz einfach. Hier ist ein Beispiel für die Instanziierung eines Loggers und die Protokollierung von Informationen und Fehlerebenen mit dem Paket.

importieren (
log "github.com/inconshreveable/log15" // Alias-Import als Protokoll
)

Funkhauptsächlich() {
serverLog := log. Neu("Repository", "Neu Repository") // Logger instanziieren
ServerLog. Info("Zustandsprüfung der Repository-Ebene erfolgreich") // Infoprotokoll
ServerLog. Fehler ("Integritätsprüfung der Repository-Ebene fehlgeschlagen") // Fehlerprotokoll
}

Das ServerLog variable ist eine Instanz des Log15-Loggers; das Neu -Methode gibt eine Protokollierung mit den von Ihnen bereitgestellten Kontextargumenten zurück.

Das Die Info -Methode gibt eine Info-Nachricht zurück, und die Fehler Methode gibt eine Fehlermeldung zurück.

Schreiben Sie nützliche und verständliche Protokolle

Die Protokollierung kann genauso wichtig sein wie jeder andere Teil des Entwicklungsprozesses. Es mag in der Anfangsphase sehr einfach erscheinen, aber das Festhalten an wesentlichen Praktiken kann den Prozess erschweren. Um jeden Grenzfall und Aspekt der Protokollierung zu bewältigen, sollten Sie zur Vereinfachung ein Protokollierungspaket verwenden.

Verwenden Sie Protokollierungsebenen, -struktur und -kontext, um Ihre Protokolle verständlich und für den beabsichtigten Zweck geeignet zu machen.