Loggning är tekniken för att föra register för framtida ändamål i mjukvaruutvecklingscykeln. Loggning är avgörande eftersom loggar hjälper till med felsökning, diagnostik, felsökning och projektövervakning.

Du kan använda loggning på olika nivåer av dina applikationer för fel, varningar, felsökning och mer.

Logga in Go

Go standardbiblioteket innehåller en logga paket rikt på funktionalitet. Den hanterar olika loggningsnivåer och grundläggande loggningsrelaterade metoder som du behöver för din applikation. Men den logga paketet kanske inte är det bästa valet om din app är komplex och du vill prioritera produktivitet.

De logga paketet tillhandahåller inte funktionalitet för strukturerade loggar. Strukturerade loggningspaket ger funktionalitet som förenklar och förbättrar loggningsprocessen. Go-ekosystemet är hem för många sådana paket.

1. Zappa från Uber

Zap är ett snabbt, strukturerat loggningspaket byggt av Ubers team med öppen källkod för att skriva loggar i Go. Uber byggde Zap-paketet för att ge mer effektiv loggning än andra paket i Go-ekosystemet, inklusive logga paket.

instagram viewer

Det finns två distinkta loggare i Zap-paketet. De Logger funktion hanterar kritiska prestandafall. De SugaredLogger erbjuder mer flexibilitet med dess printf-stil API, men det kommer med en liten kompromiss i prestanda. Även det långsammare SugaredLogger-paketet är 4-10 gånger snabbare än andra strukturerade loggningspaket.

Kör följande på en kommandorad för att installera Zap-paketet:

 få dig .uber.org/zap

Du behöver en ny version av Go för att installera och använda Zap-paketets funktionalitet framgångsrikt.

logger, fel := zap. NewProduction() // zap logger instans

om fel!= noll {
fmt. Println (fel. Fel())
}

uppskjuta logger. Synkronisera() // spolar eventuella buffertar
socker := logger. Socker() //sugared logger här

socker. Infow("misslyckades med att hämta URL",
// Strukturerad kontext som löst skrivna nyckel-värdepar.
"url", url,
"försök", 3,
"backoff", tid. Andra,
)

socker. Infof("Det gick inte att hämta URL: %s", URL) // med formateraren printf

De logger variabel är en instans av zap logger och Socker Metoden är en sockrad loggerinstans.

De Infow metoden skriver till utgången, och Infof är formateringsversionen av Infow metod.

2. Logrus-paketet

Logrus är ett strukturerat loggningspaket för Go-appar. Logrus är kompatibel med standardbiblioteksloggern, med liknande funktionalitet. Om du har erfarenhet av att använda logga paket, hittar du en svit som fungerar med Logrus.

Logrus stöder inte JSON-formatering som standard. Men du kan alltid använda ett JSON-bibliotek som det inbyggda json paket med Logrus' SetFormatter metod.

Logrus stöder loggning på olika nivåer och även om det inte är lika effektivt som de flesta loggningspaket är det funktionsrikt och säkert.

Du kan använda detta kommando för att installera Logrus i din arbetskatalog:

 hämta github.com/sirupsen/logrus

Här är ett exempel på loggning med Logrus-paketet.

importera (
"os"
logga "github.com/sirupsen/logrus" // alias import
)

funchuvud {
logga. SetFormatter(&log. JSONFormatter{}) // ställ in formateraren till JSON
logga. SetOutput (os. Stdout) // utgång till standardutgång
logga. SetLevel (logg. WarnLevel) // ställ in varningsnivå

logga. WithFields (logg. Fält{
"Name": "John Doe",
"Ålder": 40,
}).Info("Johns biodata")
}

Denna kod importerar Logrus-biblioteket och skapar ett alias för det logga. I den huvud funktionen, kallar den SetFormatter metod för att ställa in en formatterare för loggarna. Du kan använda SetOutput metod för att ange var loggmeddelanden ska gå; i detta fall standardutgång.

De SetLevel metod loggar varningar på angiven nivå eller högre.

3. ZeroLog-paket

ZeroLog är ett Zap-inspirerat, snabbt, JSON-dedikerat bibliotek för loggning, designat för prestanda. Den använder ett unikt kedje-API som tillåter Zerolog att skriva JSON och logga händelser utan tilldelningar och reflektioner.

Zerolog strävar efter att tillhandahålla ett enklare att använda API och högre prestanda samtidigt som kodbasen och API: et är enkla. Den fokuserar på strukturerad loggning och du kan använda ConsoleWriter metod för snygg inloggning på din konsol.

Det finns låg allokering, utjämnad loggning, sampling, krokar, kontextuella fält och felloggning med valfria stackspårningsfunktioner på Zerolog-paketet. Du kan också integrera Zerolog med sammanhang och http paket.

Kör det här kommandot i terminalen på din arbetsyta för att installera Zerolog paket.

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

Här är ett enkelt exempel på att använda Zerolog-paketet för en enkel operation.

importera (
"github.com/rs/zerolog" // zerolog för konfigurationer
"github.com/rs/zerolog/log" // logg för loggning
)

funchuvud() {
// UNIX Time är snabbare och mindre än de flesta tidsstämplar
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

logga. Skriv ut ("hej världen")
}

De TimeFieldFormat alternativet är inställt på Unix-tidsformatet och Skriva ut kommandot skriver textargumentet till standardutdata.

4. Paketet Log15

De Logg15 paketet är en enkel opinionsbildande verktygslåda för mänsklig och maskinläsbar loggning med bästa praxis i Go. Log15 modellerar io och http paket från Go-standardbiblioteket som ett alternativ till det inbyggda logga paket.

Funktionerna i Log15-paketet inkluderar:

  • ett enkelt, lättförståeligt API
  • strukturerad loggning med nyckel-värdepar
  • barnloggare med privat sammanhang
  • hanterargränssnitt för att konstruera anpassade loggningskonfigurationer över ett litet API
  • färgat terminalstöd
  • inbyggt stöd för att logga till filer, strömmar, systemloggar och nätverksloggar
  • buffra poster till utmatning.

Du kan installera Logg15 till dina Go-paket med detta kommando.

 hämta github.com/inconshreveable/log15

Det är lätt att komma igång med Log15-paketet. Här är ett exempel på att instansiera en logger och logga på information och felnivåer med paketet.

importera (
logga "github.com/inconshreveable/log15" // alias importera som logg
)

funchuvud() {
serverLog := logg. New("förråd", "ny förvar") // instansierande logger
serverlogg. Info("förvarslagers hälsokontroll lyckades") // infologg
serverlogg. Fel ("förvarslagers hälsokontroll misslyckades") // felloggen
}

De serverlogg variabeln är en instans av Log15-loggern; de Ny metod returnerar en logger med de sammanhangsargument du anger.

De Info metoden returnerar ett infomeddelande och Fel metod returnerar ett felmeddelande.

Skriv användbara och förståeliga loggar

Loggning kan vara lika kritisk som någon annan del av utvecklingsprocessen. Det kan tyckas väldigt enkelt i de inledande stadierna, men att hålla sig till väsentliga metoder kan komplicera processen. För att hantera varje kantfall och aspekt av loggning bör du använda ett loggningspaket för att göra saker enklare.

Använd loggningsnivåer, struktur och sammanhang för att göra dina loggar begripliga och anpassade för deras avsedda syften.