Zapisivanje je tehnika vođenja zapisa za buduće potrebe u ciklusu razvoja softvera. Zapisivanje je ključno jer zapisi pomažu u uklanjanju pogrešaka, dijagnostici, rješavanju problema i praćenju projekta.

Možete koristiti zapisivanje na različitim razinama svojih aplikacija za pogreške, upozorenja, otklanjanje pogrešaka i više.

Prijava Go

Go standardna biblioteka sadrži a log paket bogate funkcionalnosti. Rukuje raznim razinama zapisivanja i osnovnim metodama vezanim uz zapisivanje koje ćete trebati za svoju aplikaciju. Međutim log paket možda nije najbolji izbor ako je vaša aplikacija složena i želite dati prednost produktivnosti.

The log paket ne pruža funkcionalnost za strukturirane dnevnike. Strukturirani paketi za bilježenje pružaju funkcionalnost koja pojednostavljuje i poboljšava proces bilježenja. Ekosustav Go dom je mnogih takvih paketa.

1. Zap uz Uber

Zap je brz, strukturiran paket za bilježenje na razini koji je izradio Uberov open-source tim za pisanje loga u Go. Uber napravio Zap paket za pružanje učinkovitijeg bilježenja od ostalih paketa u Go ekosustavu, uključujući

instagram viewer
log paket.

Postoje dva različita logera u Zap paketu. The Drvosječa funkcija obrađuje kritične slučajeve izvedbe. The SugaredLogger nudi veću fleksibilnost sa svojim API-jem u stilu printf-a, ali dolazi s malim kompromisom u izvedbi. Čak je i sporiji SugaredLogger paket 4-10 puta brži od ostalih strukturiranih paketa za bilježenje.

Pokrenite sljedeće u naredbenom retku da biste instalirali Zap paket:

ići dobiti -u ići.uber.org/zap

Za uspješnu instalaciju i korištenje funkcionalnosti Zap paketa trebat će vam novija verzija Go-a.

drvosječa, griješiti := zap. Nova proizvodnja() // instanca zapisivača zap

ako pogriješiti != nula {
fmt. Println (pogreška Greška())
}

odgoditi drvosječa. Sinkronizacija() // ispire međuspremnike, ako ih ima
šećer := drvosječa. Šećer() //ušećereni drvosječa ovdje

šećer. Infow("nije uspjelo dohvaćanje URL-a",
// Strukturirani kontekst kao slobodno upisani parovi ključ-vrijednost.
"url", url,
"pokušaj", 3,
"backoff", vrijeme. Drugi,
)

šećer. Infof("Nije uspjelo dohvaćanje URL-a: %s", URL) // pomoću printf style formattera

The drvosječa varijabla je instanca zap drvosječa i Šećer metoda je zašećerena instanca zapisivača.

The Infow metoda piše na izlaz, a Infof je verzija formatiranja Infow metoda.

2. Paket Logrus

Logrus je strukturirani paket za bilježenje za Go aplikacije. Logrus je kompatibilan sa standardnim loggerom knjižnice, sa sličnim funkcijama. Ako imate iskustva s korištenjem log paketu, pronaći ćete paket koji radi s Logrusom.

Logrus prema zadanim postavkama ne podržava JSON formatiranje. Ali uvijek možete koristiti JSON biblioteku poput ugrađene json paket s Logrusom SetFormatter metoda.

Logrus podržava bilježenje na različitim razinama i, iako nije tako učinkovit kao većina paketa za bilježenje, bogat je značajkama i siguran je.

Ovu naredbu možete koristiti za instaliranje Logrusa u svoj radni direktorij:

ići dobiti github.com/sirupsen/logrus

Evo primjera zapisivanja s paketom Logrus.

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

funkglavni {
log. SetFormatter(&log. JSONFormatter{}) // postavi formater na JSON
log. SetOutput (os. standardni izlaz) // izlaz na standardni izlaz
log. Postavi razinu (log. Razina upozorenja) // postavi razinu upozorenja

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

Ovaj kod uvozi biblioteku Logrus i stvara pseudonim za nju named log. u glavni funkcija, ona poziva SetFormatter metoda za postavljanje formatera za zapisnike. Možete koristiti SetOutput metoda za navođenje kamo trebaju ići poruke dnevnika; u ovom slučaju, standardni izlaz.

The Postavi Razinu metoda bilježi upozorenja na navedenoj razini ili višoj.

3. ZeroLog paket

ZeroLog je Zap-inspirirana, brza, JSON posvećena biblioteka za bilježenje, dizajnirana za performanse. Koristi jedinstveni API za ulančavanje koji omogućuje Zerologu da piše JSON i bilježi događaje bez dodjela i refleksija.

Zerolog ima za cilj pružiti API lakši za korištenje i veću izvedbu dok baza koda i API ostaju jednostavni. Fokusira se na strukturirano bilježenje i možete koristiti ConsoleWriter metoda za lijepo prijavljivanje na vašoj konzoli.

Tu je niska dodjela, bilježenje na razini, uzorkovanje, zakačke, kontekstualna polja i bilježenje pogrešaka s opcijskim značajkama praćenja stogova na Zerolog paketu. Također možete integrirati Zerolog s kontekst i http paketi.

Pokrenite ovu naredbu u terminalu vašeg radnog prostora da biste instalirali Zerolog paket.

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

Evo jednostavnog primjera korištenja Zerolog paketa za jednostavnu operaciju.

uvoz (
"github.com/rs/zerolog" // nulti zapisnik za konfiguracije
"github.com/rs/zerolog/log" // zapisnik za bilježenje
)

funkglavni() {
// UNIX Vrijeme je brže i manje od većine vremenskih oznaka
nulti log. TimeFieldFormat = zerolog. TimeFormatUnix

log. Ispis("zdravo svijetu")
}

The TimeFieldFormat opcija je postavljena na Unix format vremena, a Ispis naredba piše tekstualni argument na standardni izlaz.

4. Paket Log15

The Dnevnik15 paket je jednostavan samouvjeren alat za ljudsko i strojno čitljivo bilježenje s najboljim praksama u Go. Log15 modelira io i http paketi iz Go standardne biblioteke kao alternativa ugrađenoj log paket.

Značajke paketa Log15 uključuju:

  • jednostavan, lako razumljiv API
  • strukturirano bilježenje s parovima ključ-vrijednost
  • podređeni zapisivači s privatnim kontekstom
  • sučelje rukovatelja za izradu prilagođenih konfiguracija zapisivanja preko malog API-ja
  • podrška terminala u boji
  • ugrađena podrška za bilježenje datoteka, tokova, zapisnika sustava i mrežnih zapisa
  • spremanje zapisa za izlaz.

Možete instalirati Dnevnik15 na svoje Go pakete ovom naredbom.

ići dobiti github.com/inconshreveable/log15

Lako je započeti s paketom Log15. Evo primjera instanciranja logera i evidentiranja informacija i razina pogrešaka s paketom.

uvoz (
zapisnik "github.com/inconshreveable/log15" // alias import kao dnevnik
)

funkglavni() {
serverLog := dnevnik. Novo("repozitorij", "novi spremište") // instanciranje zapisnika
serverLog. Info("provjera stanja sloja repozitorija uspješna") // info dnevnik
serverLog. Pogreška ("provjera stanja sloja spremišta nije uspjela") // zapisnik grešaka
}

The serverLog varijabla je instanca logera Log15; the Novi metoda vraća logger s argumentima konteksta koje navedete.

The Info metoda vraća info poruku, a Greška metoda vraća poruku o pogrešci.

Pišite korisne i razumljive dnevnike

Zapisivanje može biti kritično kao i bilo koji drugi dio razvojnog procesa. U početnim fazama može se činiti vrlo lakim, ali pridržavanje osnovnih praksi može zakomplicirati proces. Da biste se nosili sa svakim rubnim slučajem i aspektom zapisivanja, trebali biste koristiti paket zapisivanja kako biste olakšali stvari.

Koristite razine bilježenja, strukturu i kontekst kako bi vaši dnevnici bili razumljivi i prikladni za namjeravanu svrhu.