Logging er teknikken for å holde poster for fremtidige formål i programvareutviklingssyklusen. Logging er kritisk fordi logger hjelper med feilsøking, diagnostikk, feilsøking og prosjektovervåking.

Du kan bruke logging på ulike nivåer av applikasjonene dine for feil, advarsler, feilsøking og mer.

Logger på Go

Go-standardbiblioteket inneholder en Logg pakke rik på funksjonalitet. Den håndterer ulike loggingsnivåer og grunnleggende loggrelaterte metoder du trenger for applikasjonen din. Imidlertid Logg pakken er kanskje ikke det beste valget hvis appen din er kompleks og du ønsker å prioritere produktivitet.

De Logg pakken gir ikke funksjonalitet for strukturerte logger. Strukturerte loggingspakker gir funksjonalitet som forenkler og forbedrer loggingsprosessen. Go-økosystemet er hjemsted for mange slike pakker.

1. Zap fra Uber

Zap er en rask, strukturert, utjevnt loggingspakke bygget av Ubers åpen kildekode-team for å skrive logger i Go. Uber bygde Zap-pakken for å gi mer effektiv logging enn andre pakker i Go-økosystemet, inkludert Logg pakke.

instagram viewer

Det er to forskjellige loggere i Zap-pakken. De Logger funksjon håndterer kritiske ytelsessaker. De SugaredLogger tilbyr mer fleksibilitet med sin printf-stil API, men den kommer med en liten avveining i ytelse. Selv den langsommere SugaredLogger-pakken er 4-10 ganger raskere enn andre strukturerte loggingspakker.

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

 få -u .uber.org/zap

Du trenger en nylig versjon av Go for å installere og bruke Zap-pakkens funksjonalitet.

logger, feil := zap. NewProduction() // zap logger-forekomst

hvis feil!= null {
fmt. Println (feil. Feil())
}

utsette logger. Synkroniser() // spyler buffere, hvis noen
sukker := logger. Sukker() //sukkert logger her

sukker. Infow("kunne ikke hente URL",
// Strukturert kontekst som løst tastede nøkkelverdi-par.
"url", url,
"forsøk", 3,
"backoff", tid. Sekund,
)

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

De logger variabel er en forekomst av zap logger, og Sukker metoden er en sugared logger-forekomst.

De Infow metoden skriver til utgangen, og Infof er formateringsversjonen av Infow metode.

2. Logrus-pakken

Logrus er en strukturert loggingspakke for Go-apper. Logrus er kompatibel med standard biblioteklogger, med lignende funksjonalitet. Hvis du har erfaring med å bruke Logg pakken, finner du en suite som fungerer med Logrus.

Logrus støtter ikke JSON-formatering som standard. Men du kan alltid bruke et JSON-bibliotek som det innebygde json pakke med Logrus' SetFormatter metode.

Logrus støtter logging på forskjellige nivåer, og selv om det ikke er like effektivt som de fleste loggpakker, er det funksjonsrikt og trygt.

Du kan bruke denne kommandoen til å installere Logrus i arbeidskatalogen din:

 skaff deg github.com/sirupsen/logrus

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

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

funchoved- {
Logg. SetFormatter(&log. JSONFormatter{}) // sett formatter til JSON
Logg. SetOutput (os. Stdout) // utgang til standard utgang
Logg. SetLevel (logg. WarnLevel) // angi advarselsnivå

Logg. WithFields (logg. Enger{
"Name": "John Doe",
"Alder": 40,
}).Info("Johns biodata")
}

Denne koden importerer Logrus-biblioteket og lager et alias for det navngitt Logg. I hoved- funksjon, kaller den SetFormatter metode for å angi en formatering for loggene. Du kan bruke SetOutput metode for å spesifisere hvor loggmeldinger skal gå; i dette tilfellet standard utgang.

De Sett nivå metoden logger advarsler på spesifisert nivå eller høyere.

3. ZeroLog-pakke

ZeroLog er et Zap-inspirert, raskt, JSON-dedikert bibliotek for logging, designet for ytelse. Den bruker et unikt kjede-API som lar Zerolog skrive JSON og logge hendelser uten tildelinger og refleksjoner.

Zerolog har som mål å gi en brukervennlig API og høyere ytelse samtidig som kodebasen og APIen er enkel. Den fokuserer på strukturert logging, og du kan bruke ConsoleWriter metode for pen logging på konsollen din.

Det er lav allokering, utjevnt logging, sampling, kroker, kontekstuelle felt og feillogging med valgfrie stabelsporingsfunksjoner på Zerolog-pakken. Du kan også integrere Zerolog med kontekst og http pakker.

Kjør denne kommandoen i terminalen på arbeidsområdet for å installere Zerolog pakke.

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

Her er et enkelt eksempel på bruk av Zerolog-pakken for en enkel operasjon.

import (
"github.com/rs/zerolog" // zerolog for konfigurasjoner
"github.com/rs/zerolog/log" // logg for logging
)

funchoved-() {
// UNIX-tid er raskere og mindre enn de fleste tidsstempler
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

Logg. Skriv ut ("hei verden")
}

De TimeFieldFormat alternativet er satt til Unix-tidsformatet, og Skrive ut kommandoen skriver tekstargumentet til standardutdata.

4. Log15-pakken

De Logg15 pakken er et enkelt meningsfylt verktøysett for menneskelig og maskinlesbar logging med beste praksis i Go. Log15 modellerer io og http pakker fra Go-standardbiblioteket som et alternativ til det innebygde Logg pakke.

Funksjonene til Log15-pakken inkluderer:

  • en enkel, lett å forstå API
  • strukturert logging med nøkkel-verdi-par
  • barneloggere med privat kontekst
  • handlergrensesnitt for å konstruere tilpassede loggkonfigurasjoner over et lite API
  • farget terminalstøtte
  • innebygd støtte for logging til filer, strømmer, systemlogger og nettverkslogger
  • bufre poster til utdata.

Du kan installere Logg15 til Go-pakkene dine med denne kommandoen.

 skaff deg github.com/inconshreveable/log15

Det er enkelt å komme i gang med Log15-pakken. Her er et eksempel på instansiering av en logger og pålogging av informasjon og feilnivåer med pakken.

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

funchoved-() {
serverLog := logg. New("lager", "ny oppbevaringssted") // instansierende logger
serverlogg. Info("depotlags helsesjekk vellykket") // infologg
serverlogg. Feil ("helsesjekk av lagringslag mislyktes") // feil logg
}

De serverlogg variabel er en forekomst av Log15-loggeren; de Ny metoden returnerer en logger med kontekstargumentene du oppgir.

De Info metoden returnerer en infomelding, og Feil metoden returnerer en feilmelding.

Skriv nyttige og forståelige logger

Logging kan være like kritisk som alle andre deler av utviklingsprosessen. Det kan virke veldig enkelt i de innledende stadiene, men å holde seg til essensielle praksiser kan komplisere prosessen. For å håndtere alle kantsaker og aspekter ved logging, bør du bruke en loggingspakke for å gjøre ting enklere.

Bruk loggingsnivåer, struktur og kontekst for å gjøre loggene forståelige og tilpasset de tiltenkte formålene.