Beleženje je tehnika vodenja zapisov za prihodnje namene v ciklu razvoja programske opreme. Beleženje je ključnega pomena, ker dnevniki pomagajo pri odpravljanju napak, diagnostiki, odpravljanju težav in spremljanju projekta.

Beleženje lahko uporabite na različnih ravneh vaših aplikacij za napake, opozorila, odpravljanje napak in drugo.

Prijava Go

Standardna knjižnica Go vsebuje a dnevnik paket z bogato funkcionalnostjo. Obvladuje različne ravni beleženja in osnovne metode, povezane z beleženjem, ki jih boste potrebovali za svojo aplikacijo. Vendar pa je dnevnik paket morda ni najboljša izbira, če je vaša aplikacija zapletena in želite dati prednost produktivnosti.

The dnevnik paket ne zagotavlja funkcionalnosti za strukturirane dnevnike. Strukturirani paketi beleženja zagotavljajo funkcionalnost, ki poenostavi in ​​izboljša postopek beleženja. Ekosistem Go je dom številnih takih paketov.

1. Zap z Uberjem

Zap je hiter, strukturiran in izravnan paket za beleženje, ki ga je razvila Uberjeva odprtokodna ekipa za pisanje dnevnikov v Go. Uber zgradil paket Zap za zagotavljanje učinkovitejšega beleženja kot drugi paketi v ekosistemu Go, vključno z

instagram viewer
dnevnik paket.

V paketu Zap sta dva različna zapisovalnika. The Logger funkcija obravnava kritične primere delovanja. The SugaredLogger ponuja več prilagodljivosti s svojim API-jem v slogu printf, vendar prihaja z majhnim kompromisom pri zmogljivosti. Tudi počasnejši paket SugaredLogger je 4–10-krat hitrejši od drugih strukturiranih paketov beleženja.

Za namestitev paketa Zap v ukazni vrstici zaženite naslednje:

pojdi dobiti -u pojdi.uber.org/zap

Za uspešno namestitev in uporabo funkcionalnosti paketa Zap boste potrebovali najnovejšo različico programa Go.

logger, err := zap. Nova proizvodnja() // primerek zapisovalnika zap

če napaka!= nič {
fmt. Println (napaka Napaka())
}

odložiti drvar. Sync() // izpere medpomnilnike, če obstajajo
sladkor := drvar. sladkor () //pocukrani drvar tukaj

sladkor. Infow("ni uspelo pridobiti URL-ja",
// Strukturiran kontekst kot ohlapno tipizirani pari ključ-vrednost.
"url", url,
"poskus", 3,
"backoff", čas. Drugič,
)

sladkor. Infof("URL-ja ni bilo mogoče pridobiti: %s", URL) // z uporabo oblikovalnika sloga printf

The drvar spremenljivka je primerek zap logger in sladkor metoda je pocukrani primerek zapisovalnika.

The Infow metoda piše v izhod, in Infof je različica za oblikovanje datoteke Infow metoda.

2. Paket Logrus

Logrus je strukturiran paket beleženja za aplikacije Go. Logrus je združljiv s standardnim zapisovalnikom knjižnic s podobno funkcionalnostjo. Če imate izkušnje z uporabo dnevnik paket, boste našli paket, ki deluje z Logrusom.

Logrus privzeto ne podpira oblikovanja JSON. Vedno pa lahko uporabite knjižnico JSON, kot je vgrajena json paket z Logrusom SetFormatter metoda.

Logrus podpira beleženje na različnih ravneh in, čeprav ni tako zmogljiv kot večina paketov za beleženje, je bogat s funkcijami in varen.

S tem ukazom lahko namestite Logrus v svoj delovni imenik:

pojdi dobite github.com/sirupsen/logrus

Tukaj je primer beleženja s paketom Logrus.

uvoz (
"os"
dnevnik "github.com/sirupsen/logrus" // uvoz vzdevka
)

funkglavni {
dnevnik. SetFormatter(&log. JSONFormatter{}) // nastavi oblikovalec na JSON
dnevnik. SetOutput (os. Stdout) // izpis v standardni izhod
dnevnik. SetLevel (log. WarnLevel) // nastavi stopnjo opozorila

dnevnik. WithFields (log. Polja{
"Ime": "John Doe",
"Starost": 40,
}).Info("Johnovi biološki podatki")
}

Ta koda uvozi knjižnico Logrus in ustvari vzdevek zanjo imenovano dnevnik. V glavni funkcijo, pokliče SetFormatter način za nastavitev oblikovalnika za dnevnike. Lahko uporabite SetOutput metoda za določanje, kam naj gredo sporočila dnevnika; v tem primeru standardni izhod.

The SetLevel metoda beleži opozorila na določeni ali višji ravni.

3. Paket ZeroLog

ZeroLog je hitra knjižnica, namenjena JSON-u, ki jo navdihuje Zap, zasnovana za zmogljivost. Uporablja edinstven API za veriženje, ki Zerologu omogoča pisanje JSON in beleženje dogodkov brez dodelitev in refleksij.

Cilj Zerologa je zagotoviti API, ki je enostavnejši za uporabo, in večjo zmogljivost, hkrati pa ohranjati preprosto osnovo kode in API. Osredotoča se na strukturirano beleženje in lahko uporabite ConsoleWriter metoda za lepo prijavo na vašo konzolo.

V paketu Zerolog so na voljo nizka dodelitev, beleženje na ravni, vzorčenje, kavlji, kontekstualna polja in beleženje napak z izbirnimi funkcijami sledenja skladov. Zerolog lahko integrirate tudi z kontekstu in http paketi.

Zaženite ta ukaz v terminalu svojega delovnega prostora, da namestite Zerolog paket.

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

Tukaj je preprost primer uporabe paketa Zerolog za preprosto operacijo.

uvoz (
"github.com/rs/zerolog" // ničelni dnevnik za konfiguracije
"github.com/rs/zerolog/log" // dnevnik za beleženje
)

funkglavni() {
// Čas UNIX je hitrejši in manjši od večine časovnih žigov
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

dnevnik. Natisni ("zdravo svet")
}

The TimeFieldFormat možnost je nastavljena na format časa Unix in Tiskanje ukaz zapiše besedilni argument v standardni izhod.

4. Paket Log15

The Dnevnik15 paket je preprost nabor orodij za človeka in strojno berljivo beleženje z najboljšimi praksami v Go. Log15 modelira io in http paketi iz standardne knjižnice Go kot alternativa vgrajeni dnevnik paket.

Funkcije paketa Log15 vključujejo:

  • preprost in lahko razumljiv API
  • strukturirano beleženje s pari ključ-vrednost
  • podrejeni zapisovalniki z zasebnim kontekstom
  • vmesnik za obravnavo za izdelavo konfiguracij beleženja po meri prek majhnega API-ja
  • barvna terminalska podpora
  • vgrajena podpora za beleženje v datoteke, tokove, sistemske dnevnike in omrežne dnevnike
  • medpomnjenje zapisov za izpis.

Lahko namestite Dnevnik15 v svoje pakete Go s tem ukazom.

pojdi pridobite github.com/inconshreveable/log15

S paketom Log15 je enostavno začeti. Tukaj je primer instanciranja zapisovalnika in beleženja informacij in ravni napak s paketom.

uvoz (
dnevnik "github.com/inconshreveable/log15" // alias uvozi kot dnevnik
)

funkglavni() {
strežnikLog := dnevnik. Novo("repozitorij", "novo repozitorij") // instanciranje zapisovalnika
serverLog. Informacije ("preverjanje zdravja sloja skladišča uspešno") // info dnevnik
serverLog. Napaka ("preverjanje stanja plasti repozitorija ni uspelo") // dnevnik napak
}

The serverLog spremenljivka je primerek zapisovalnika Log15; the Novo metoda vrne zapisovalnik s kontekstnimi argumenti, ki jih podate.

The Informacije metoda vrne informacijsko sporočilo in Napaka metoda vrne sporočilo o napaki.

Pišite uporabne in razumljive dnevnike

Beleženje je lahko tako kritično kot kateri koli drug del razvojnega procesa. Na začetnih stopnjah se morda zdi zelo enostavno, toda upoštevanje bistvenih praks lahko zaplete postopek. Za obravnavo vseh robnih primerov in vidikov beleženja bi morali uporabiti paket za beleženje, ki olajša stvari.

Uporabite ravni beleženja, strukturo in kontekst, da bodo vaši dnevniki razumljivi in ​​primerni za predvidene namene.