Logning er teknikken til at føre optegnelser til fremtidige formål i softwareudviklingscyklussen. Logning er kritisk, fordi logfiler hjælper med fejlfinding, diagnosticering, fejlfinding og projektovervågning.

Du kan bruge logning på forskellige niveauer af dine applikationer til fejl, advarsler, fejlretning og mere.

Log ind Go

Go-standardbiblioteket indeholder en log pakke rig på funktionalitet. Det håndterer forskellige logningsniveauer og grundlæggende logningsrelaterede metoder, du skal bruge til din applikation. Imidlertid log pakke er måske ikke det bedste valg, hvis din app er kompleks, og du ønsker at prioritere produktivitet.

Det log pakken giver ikke funktionalitet til strukturerede logfiler. Strukturerede logningspakker giver funktionalitet, der forenkler og forbedrer logningsprocessen. Go-økosystemet er hjemsted for mange sådanne pakker.

1. Zap fra Uber

Zap er en hurtig, struktureret logningspakke bygget af Ubers open source-team til at skrive logs i Go. Uber byggede Zap-pakken for at give mere effektiv logning end andre pakker i Go-økosystemet, inklusive log pakke.

Der er to forskellige loggere i Zap-pakken. Det Logger funktion håndterer kritiske præstationssager. Det SugaredLogger tilbyder mere fleksibilitet med sin printf-stil API, men den kommer med en lille afvejning i ydeevne. Selv den langsommere SugaredLogger-pakke er 4-10 gange hurtigere end andre strukturerede logningspakker.

Kør følgende på en kommandolinje for at installere Zap-pakken:

 få dig .uber.org/zap

Du skal bruge en nyere version af Go for at installere og bruge Zap-pakkens funktionalitet med succes.

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

hvis fejl!= nul {
fmt. Println (fejl. Fejl())
}

udsætte logger. Synkronisere() // skyller buffere, hvis nogen
sukker := logger. Sukker() //sukkert logger her

sukker. Infow("kan ikke hente URL",
// Struktureret kontekst som løst indtastede nøgleværdi-par.
"url", url,
"forsøg", 3,
"backoff", tid. Sekund,
)

sukker. Infof("Kunne ikke hente URL: %s", URL) // ved at bruge printf stilformater

Det logger variabel er en forekomst af zap logger og Sukker metoden er en sukkersuget logger-instans.

Det Infow metoden skriver til outputtet, og Infof er formateringsversionen af Infow metode.

2. Logrus-pakken

Logrus er en struktureret logningspakke til Go-apps. Logrus er kompatibel med standard bibliotekslogger med lignende funktionalitet. Hvis du har erfaring med at bruge log pakke, finder du en suite, der arbejder med Logrus.

Logrus understøtter ikke JSON-formatering som standard. Men du kan altid bruge et JSON-bibliotek som det indbyggede json pakke med Logrus' SetFormatter metode.

Logrus understøtter logning på forskellige niveauer, og selvom det ikke er så effektivt som de fleste logpakker, er det funktionsrigt og sikkert.

Du kan bruge denne kommando til at installere Logrus i din arbejdsmappe:

 få github.com/sirupsen/logrus

Her er et eksempel på logning med Logrus-pakken.

importere (
"os"
log "github.com/sirupsen/logrus" // alias import
)

funcvigtigste {
log. SetFormatter(&log. JSONFormatter{}) // sæt formater til JSON
log. SetOutput (os. Stdout) // output til standard output
log. SetLevel (log. WarnLevel) // indstil advarselsniveau

log. WithFields (log. Felter{
"Name": "John Doe",
"Alder": 40,
}).Info("Johns biodata")
}

Denne kode importerer Logrus-biblioteket og opretter et alias for det navngivet log. I vigtigste funktion, kalder den SetFormatter metode til at indstille en formatter for logfilerne. Du kan bruge Indstil output metode til at specificere, hvor logmeddelelser skal gå; i dette tilfælde standard output.

Det Indstil niveau metode logger advarsler i det angivne niveau eller derover.

3. ZeroLog-pakke

ZeroLog er et Zap-inspireret, hurtigt, JSON-dedikeret bibliotek til logning, designet til ydeevne. Den bruger en unik kæde-API, der tillader Zerolog at skrive JSON og logge hændelser uden tildelinger og refleksioner.

Zerolog sigter mod at levere en nemmere at bruge API og højere ydeevne, samtidig med at kodebasen og API er enkel. Det fokuserer på struktureret logning, og du kan bruge ConsoleWriter metode til smuk at logge på din konsol.

Der er lav allokering, udjævnet logning, sampling, hooks, kontekstuelle felter og fejllogning med valgfri staksporingsfunktioner på Zerolog-pakken. Du kan også integrere Zerolog med sammenhæng og http pakker.

Kør denne kommando i terminalen på dit arbejdsområde for at installere Zerolog pakke.

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

Her er et simpelt eksempel på brug af Zerolog-pakken til en enkel operation.

importere (
"github.com/rs/zerolog" // zerolog for configs
"github.com/rs/zerolog/log" // log til logning
)

funcvigtigste() {
// UNIX Time er hurtigere og mindre end de fleste tidsstempler
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

log. Udskriv ("hej verden")
}

Det TimeFieldFormat indstillingen er indstillet til Unix-tidsformatet, og Print kommandoen skriver tekstargumentet til standardoutput.

4. Log15-pakken

Det Log15 pakke er et simpelt meningsfuldt værktøjssæt til menneskelig og maskinlæsbar logning med bedste praksis i Go. Log15 modellerer io og http pakker fra Go-standardbiblioteket som et alternativ til det indbyggede log pakke.

Funktionerne i Log15-pakken inkluderer:

  • en enkel, letforståelig API
  • struktureret logning med nøgleværdi-par
  • børneloggere med privat kontekst
  • handlergrænseflade til at konstruere brugerdefinerede logningskonfigurationer over en lille API
  • farvet terminalstøtte
  • indbygget understøttelse af logning til filer, streams, systemlogfiler og netværkslogfiler
  • buffering af poster til output.

Du kan installere Log15 til dine Go-pakker med denne kommando.

 få github.com/inconshreveable/log15

Det er nemt at komme i gang med Log15-pakken. Her er et eksempel på at instansiere en logger og logge på info og fejlniveauer med pakken.

importere (
log "github.com/inconshreveable/log15" // alias import som log
)

funcvigtigste() {
serverLog := log. Ny("lager", "ny depot") // instansierende logger
serverlog. Info("sundhedstjek af lagerlag lykkedes") // info log
serverlog. Fejl ("sundhedstjek af lagerlag mislykkedes") // fejllog
}

Det serverlog variabel er en forekomst af Log15-loggeren; det Ny metoden returnerer en logger med de kontekstargumenter, du angiver.

Det Info metoden returnerer en infomeddelelse, og Fejl metoden returnerer en fejlmeddelelse.

Skriv nyttige og forståelige logfiler

Logning kan være lige så kritisk som enhver anden del af udviklingsprocessen. Det kan virke meget nemt i de indledende faser, men at holde sig til essentiel praksis kan komplicere processen. For at håndtere alle kant-sager og aspekter af logning, bør du bruge en logningspakke for at gøre tingene lettere.

Brug logningsniveauer, struktur og kontekst til at gøre dine logfiler forståelige og egnede til deres tilsigtede formål.