Registravimas yra įrašų saugojimo ateities tikslais metodas programinės įrangos kūrimo cikle. Registravimas yra labai svarbus, nes žurnalai padeda derinti, diagnozuoti, šalinti triktis ir stebėti projektą.
Galite naudoti registravimą įvairiuose programų lygiuose, kad gautumėte klaidų, įspėjimų, derinimo ir kt.
Prisijungimas Eiti
„Go“ standartinė biblioteka yra a žurnalas daug funkcijų turintis paketas. Jis tvarko įvairius registravimo lygius ir pagrindinius su registravimu susijusius metodus, kurių jums prireiks jūsų programai. Tačiau, žurnalas paketas gali būti ne geriausias pasirinkimas, jei jūsų programa yra sudėtinga ir norite teikti pirmenybę produktyvumui.
The žurnalas paketas nesuteikia struktūrinių žurnalų funkcijų. Struktūriniai registravimo paketai suteikia funkcionalumą, kuris supaprastina ir pagerina registravimo procesą. „Go“ ekosistemoje yra daug tokių paketų.
1. „Zap“ iš „Uber“.
Zap yra greitas, struktūrizuotas, išlygintas registravimo paketas, sukurtas Uber atvirojo kodo komandos, skirtas žurnalams rašyti Go. Uber sukūrė „Zap“ paketą, kad teiktų našesnį registravimą nei kiti „Go“ ekosistemos paketai, įskaitant „
žurnalas paketą.„Zap“ pakete yra du skirtingi registratoriai. The Kirtėjas funkcija tvarko kritinius našumo atvejus. The SugaredLogger siūlo daugiau lankstumo su savo printf stiliaus API, tačiau tai susiję su nedideliu našumo kompromisu. Net lėtesnis „SugaredLogger“ paketas yra 4–10 kartų greitesnis nei kiti struktūriniai registravimo paketai.
Norėdami įdiegti „Zap“ paketą, komandinėje eilutėje paleiskite šiuos veiksmus:
eik gauti -u eik.uber.org/zap
Norint įdiegti ir sėkmingai naudoti „Zap“ paketo funkcijas, jums reikės naujausios „Go“ versijos.
logger, err := zap. Nauja gamyba () // zap logger egzempliorius
jeigu klysta! = nulis {
fmt. Println (err. Klaida ()
}atidėti medkirtys. Sinchronizuoti () // išplauna buferius, jei tokių yra
cukrus := medkirtis. Cukrus () //cukruotas medkirtys čiacukraus. Infow("nepavyko gauti URL",
// Struktūrinis kontekstas kaip laisvai įvestos rakto-reikšmių poros.
"url", url,
"bandymas", 3,
„atsitraukimas“, laikas. Antra,
)
cukraus. Infof("Nepavyko gauti URL: %s", URL) // naudojant printf stiliaus formatavimo priemonę
The medkirtys kintamasis yra pavyzdys zap medkirtys ir Cukrus metodas yra cukruotas registravimo pavyzdys.
The Infow metodas rašo į išvestį ir Infof yra formatavimo versija Infow metodas.
2. „Logrus“ paketas
Logrus yra struktūrinis registravimo paketas, skirtas „Go“ programoms. Logrus yra suderinamas su standartiniu bibliotekos registratoriumi, turinčiu panašias funkcijas. Jei turite patirties naudojant žurnalas paketą, rasite komplektą, dirbantį su Logrus.
Pagal numatytuosius nustatymus „Logrus“ nepalaiko JSON formatavimo. Bet visada galite naudoti JSON biblioteką, kaip ir įtaisytąją json paketas su Logrus SetFormatter metodas.
„Logrus“ palaiko registravimą įvairiais lygiais ir, nors jis nėra toks našus kaip dauguma registravimo paketų, turi daug funkcijų ir yra saugus.
Galite naudoti šią komandą, norėdami įdiegti Logrus į savo darbo katalogą:
eik Gaukite github.com/sirupsen/logrus
Štai registravimo naudojant Logrus paketą pavyzdys.
importuoti (
"os"
Prisijungti „github.com/sirupsen/logrus“ // slapyvardžio importas
)funcpagrindinis {
žurnalas. SetFormatter(&log. JSONFormatter{}) // nustatykite formatuotoją į JSON
žurnalas. SetOutput (os. Stdout) // išvestis į standartinę išvestį
žurnalas. SetLevel (log. WarnLevel) // nustatyti įspėjimo lygį
žurnalas. WithFields (log. Laukai{
"Vardas": "John Doe",
"Amžius": 40,
}).Informacija („Jono biografiniai duomenys“)
}
Šis kodas importuoja Logrus biblioteką ir sukuria jai slapyvardį žurnalas. Viduje pagrindinis funkcija, ji vadina SetFormatter būdas nustatyti žurnalų formatuotoją. Galite naudoti SetOutput būdas nurodyti, kur turi būti siunčiami žurnalo pranešimai; šiuo atveju standartinė išvestis.
The SetLevel metodas registruoja įspėjimus nurodytu ar aukštesniu lygiu.
3. ZeroLog paketas
ZeroLog yra „Zap“ įkvėpta, greita, JSON skirta registravimo biblioteka, skirta našumui. Jame naudojama unikali grandinės API, leidžianti „Zerolog“ rašyti JSON ir registruoti įvykius be paskirstymo ir atspindžių.
„Zerolog“ siekia teikti lengviau naudojamą API ir didesnį našumą, kartu išlaikant paprastą kodo bazę ir API. Jame pagrindinis dėmesys skiriamas struktūriniam registravimui ir galite naudoti ConsoleWriter būdas gražiai prisijungti prie savo konsolės.
Yra mažas paskirstymas, išlygintas registravimas, mėginių ėmimas, kabliukai, kontekstiniai laukai ir klaidų registravimas su pasirenkamomis dėklo sekimo funkcijomis „Zerolog“ pakete. Taip pat galite integruoti Zerolog su kontekste ir http paketus.
Paleiskite šią komandą savo darbo srities terminale, kad įdiegtumėte Zerologas paketą.
eik get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)
Štai paprastas Zerolog paketo naudojimo paprastam veiksmui pavyzdys.
importuoti (
"github.com/rs/zerolog" // zerolog konfigūracijose
"github.com/rs/zerolog/log" // žurnalas registravimui
)funcpagrindinis() {
// UNIX laikas yra greitesnis ir mažesnis nei dauguma laiko žymų
zerologas. TimeFieldFormat = nulinis. TimeFormatUnix
žurnalas. Spausdinti („sveikas pasauli“)
}
The TimeFieldFormat parinktis nustatyta į Unix laiko formatą, ir Spausdinti komanda rašo teksto argumentą į standartinę išvestį.
4. „Log15“ paketas
The Log15 paketas yra paprastas žmonių ir mašinų skaitomas įrankių rinkinys su geriausios „Go“ praktikos pavyzdžiais. Log15 modeliai io ir http paketus iš Go standartinės bibliotekos kaip alternatyvą įtaisytajai žurnalas paketą.
Log15 paketo funkcijos apima:
- paprasta, lengvai suprantama API
- struktūrinis registravimas su raktų ir reikšmių poromis
- vaikų registratoriai su privačiu kontekstu
- tvarkyklės sąsaja, skirta sukurti pasirinktines registravimo konfigūracijas per mažą API
- spalvotas terminalo palaikymas
- integruotas palaikymas registruojant failus, srautus, sistemos žurnalus ir tinklo žurnalus
- buferio įrašai į išvestį.
Galite įdiegti Log15 į savo Go paketus naudodami šią komandą.
eik Gaukite github.com/inconshreveable/log15
Lengva pradėti naudotis „Log15“ paketu. Štai pavyzdys, kaip sukurti registratorių ir įvesti informaciją bei klaidų lygius naudojant paketą.
importuoti (
Prisijungti „github.com/inconshreveable/log15“ // slapyvardis importuoti kaip žurnalą
)
funcpagrindinis() {
serverLog := žurnalas. New("saugykla", "naujas saugykla“) // momentinis registratorius
serverio žurnalas. Informacija ("saugyklos sluoksnio būklės patikrinimas sėkmingas") // informacijos žurnalas
serverio žurnalas. Klaida ("saugyklos sluoksnio būklės patikrinimas nepavyko") // klaidų žurnalas
}
The serverio žurnalas kintamasis yra Log15 registratoriaus pavyzdys; į Nauja metodas grąžina registratorių su jūsų pateiktais konteksto argumentais.
The Informacija metodas grąžina informacinį pranešimą ir Klaida metodas grąžina klaidos pranešimą.
Rašykite naudingus ir suprantamus žurnalus
Registravimas gali būti toks pat svarbus kaip ir bet kuri kita kūrimo proceso dalis. Pradiniuose etapuose tai gali atrodyti labai paprasta, tačiau esminių praktikų laikymasis gali apsunkinti procesą. Kad galėtumėte tvarkyti kiekvieną medienos ruošos atvejį ir aspektą, turėtumėte naudoti registravimo paketą, kad viskas būtų lengviau.
Naudokite registravimo lygius, struktūrą ir kontekstą, kad žurnalai būtų suprantami ir atitiktų numatytus tikslus.