Protokolovanie je technika uchovávania záznamov pre budúce účely v cykle vývoja softvéru. Protokolovanie je dôležité, pretože protokoly pomáhajú pri ladení, diagnostike, riešení problémov a monitorovaní projektu.

Protokolovanie na rôznych úrovniach aplikácií môžete použiť na chyby, upozornenia, ladenie a ďalšie.

Prihlásenie Go

Štandardná knižnica Go obsahuje a log balík bohatý na funkcie. Zvláda rôzne úrovne protokolovania a základné metódy súvisiace s protokolovaním, ktoré budete potrebovať pre svoju aplikáciu. Avšak, log balík nemusí byť najlepšou voľbou, ak je vaša aplikácia zložitá a chcete uprednostniť produktivitu.

The log balík neposkytuje funkcie pre štruktúrované protokoly. Štruktúrované protokolovacie balíky poskytujú funkcie, ktoré zjednodušujú a zlepšujú proces protokolovania. Ekosystém Go je domovom mnohých takýchto balíkov.

1. Zap od Uberu

Zap je rýchly, štruktúrovaný a vyrovnaný protokolový balík vytvorený tímom Uberu s otvoreným zdrojovým kódom na písanie protokolov v Go. Uber vytvoril balík Zap tak, aby poskytoval výkonnejšie protokolovanie ako iné balíky v ekosystéme Go, vrátane

instagram viewer
log balík.

V balíku Zap sú dva odlišné zapisovače. The Logger funkcia rieši kritické prípady výkonu. The SugaredLogger ponúka väčšiu flexibilitu s API v štýle printf, ale prichádza s malým kompromisom vo výkone. Dokonca aj pomalší balík SugaredLogger je 4-10 krát rýchlejší ako iné balíky štruktúrovaného protokolovania.

Ak chcete nainštalovať balík Zap, spustite na príkazovom riadku nasledovné:

ísť dostať -u ísť.uber.org/zap

Ak chcete úspešne nainštalovať a používať funkcie balíka Zap, budete potrebovať najnovšiu verziu Go.

drevorubač, chyba := zap. NewProduction() // inštancia zapisovača zap

ak chyba!= nula {
fmt. Println (chyba. Chyba())
}

odložiť drevorubač. Sync() // vyprázdni vyrovnávacie pamäte, ak existujú
cukor := drevorubač. cukor() //sladený logger tu

cukor. Infow("nepodarilo sa načítať URL",
// Štruktúrovaný kontext ako voľne napísané páry kľúč – hodnota.
"url", url,
"pokus", 3,
"backoff", čas. po druhé,
)

cukor. Infof("Nepodarilo sa načítať URL: %s", URL) // pomocou formátovača štýlu printf

The drevorubač premenná je inštanciou premennej zap záznamník a Cukor metóda je presýtená inštancia zapisovača.

The Infow metóda zapíše na výstup a Infof je formátovacia verzia súboru Infow metóda.

2. Balíček Logrus

Logrus je štruktúrovaný protokolový balík pre aplikácie Go. Logrus je kompatibilný so štandardným záznamníkom knižnice s podobnou funkcionalitou. Ak máte skúsenosti s používaním log balík, nájdete sadu pracujúcu s Logrus.

Logrus štandardne nepodporuje formátovanie JSON. Vždy však môžete použiť knižnicu JSON, ako je vstavaná json balík s Logrus' SetFormatter metóda.

Logrus podporuje protokolovanie na rôznych úrovniach a hoci nie je taký výkonný ako väčšina protokolovacích balíkov, je bohatý na funkcie a je bezpečný.

Tento príkaz môžete použiť na inštaláciu Logrusu do vášho pracovného adresára:

ísť získajte github.com/sirupsen/logrus

Tu je príklad protokolovania pomocou balíka Logrus.

importovať (
"os"
log "github.com/sirupsen/logrus" // import aliasov
)

funchlavné {
log. SetFormatter(&log. JSONFormatter{}) // nastavte formátovač na JSON
log. SetOutput (os. Stdout) // výstup na štandardný výstup
log. SetLevel (log. WarnLevel) // nastavenie úrovne varovania

log. WithFields (log. polia{
"Meno": "John Doe",
"Vek": 40,
}).Info("Johnove životopisné údaje")
}

Tento kód importuje knižnicu Logrus a vytvorí pre ňu alias s názvom log. V hlavné funkciu, volá SetFormatter spôsob nastavenia formátovača pre protokoly. Môžete použiť SetOutput metóda na určenie, kam by sa správy denníka mali presúvať; v tomto prípade štandardný výstup.

The SetLevel metóda zaznamenáva varovania na špecifikovanej úrovni alebo vyššej.

3. Balík ZeroLog

ZeroLog je rýchla knižnica pre protokolovanie JSON inšpirovaná Zapom, navrhnutá pre výkon. Používa unikátne reťazenie API, ktoré umožňuje Zerologu písať JSON a protokolovať udalosti bez alokácií a odrazov.

Cieľom Zerologu je poskytnúť jednoduchšie použiteľné API a vyšší výkon pri zachovaní jednoduchosti kódovej základne a API. Zameriava sa na štruktúrované protokolovanie a môžete použiť ConsoleWriter metóda pekného prihlásenia na vašej konzole.

V balíku Zerolog je nízka alokácia, vyrovnané protokolovanie, vzorkovanie, háky, kontextové polia a protokolovanie chýb s voliteľnými funkciami sledovania zásobníka. Môžete tiež integrovať Zerolog s kontext a http balíkov.

Spustite tento príkaz v termináli vášho pracovného priestoru a nainštalujte ho Zerolog balík.

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

Tu je jednoduchý príklad použitia balíka Zerolog na jednoduchú operáciu.

importovať (
"github.com/rs/zerolog" // zerolog pre konfigurácie
"github.com/rs/zerolog/log" // log pre logovanie
)

funchlavné() {
// UNIX Time je rýchlejší a menší ako väčšina časových pečiatok
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

log. Tlač ("ahoj svet")
}

The TimeFieldFormat je nastavená na formát času Unix a Tlačiť príkaz zapíše textový argument na štandardný výstup.

4. Balík Log15

The Log15 balík je jednoduchá súprava nástrojov pre ľudí a strojovo čitateľné protokolovanie s osvedčenými postupmi v Go. Model Log15 io a http balíky zo štandardnej knižnice Go ako alternatíva k vstavanej log balík.

Vlastnosti balíka Log15 zahŕňajú:

  • jednoduché, ľahko pochopiteľné API
  • štruktúrované protokolovanie s pármi kľúč – hodnota
  • detské zapisovače so súkromným kontextom
  • rozhranie handlera na vytváranie vlastných konfigurácií protokolovania cez malé API
  • farebná podpora terminálu
  • vstavaná podpora pre protokolovanie súborov, streamov, systémových protokolov a sieťových protokolov
  • ukladanie záznamov na výstup.

Môžete nainštalovať Log15 do balíkov Go pomocou tohto príkazu.

ísť získajte github.com/inconshreveable/log15

Začať s balíkom Log15 je jednoduché. Tu je príklad vytvorenia inštancie zapisovača a prihlásenia o úrovniach informácií a chýb s balíkom.

importovať (
log "github.com/inconshreveable/log15" // import aliasov ako log
)

funchlavné() {
serverLog := log. New("úložisko", "Nový Úložisko") // vytvára sa inštancia zapisovača
serverLog. Info("kontrola stavu vrstvy úložiska úspešná") // info log
serverLog. Chyba ("kontrola stavu vrstvy úložiska zlyhala") // denník chýb
}

The serverLog premenná je inštanciou loggera Log15; a Nový metóda vráti zapisovač s kontextovými argumentmi, ktoré zadáte.

The Info metóda vráti informačnú správu a Chyba metóda vráti chybové hlásenie.

Píšte si užitočné a zrozumiteľné denníky

Protokolovanie môže byť rovnako dôležité ako ktorákoľvek iná časť procesu vývoja. V počiatočných fázach sa to môže zdať veľmi jednoduché, ale dodržiavanie základných postupov môže tento proces skomplikovať. Na zvládnutie každého okrajového prípadu a aspektu protokolovania by ste mali použiť protokolovací balík, ktorý vám uľahčí prácu.

Použite úrovne protokolovania, štruktúru a kontext, aby boli vaše protokoly zrozumiteľné a vhodné na zamýšľané účely.