Kirjaaminen on tekniikka, jolla tallennetaan tietoja tulevia tarkoituksia varten ohjelmistokehityssyklissä. Kirjaaminen on tärkeää, koska lokit auttavat virheenkorjauksessa, diagnostiikassa, vianmäärityksessä ja projektin valvonnassa.

Voit käyttää lokiin kirjaamista sovellusten eri tasoilla virheiden, varoitusten, virheenkorjauksen ja muiden tietojen vuoksi.

Kirjaudu sisään Go

Go-standardikirjasto sisältää a Hirsi runsaasti toimintoja sisältävä paketti. Se käsittelee erilaisia ​​kirjaustasoja ja kirjaamiseen liittyviä perusmenetelmiä, joita tarvitset sovelluksellesi. Kuitenkin Hirsi paketti ei ehkä ole paras valinta, jos sovelluksesi on monimutkainen ja haluat priorisoida tuottavuuden.

The Hirsi paketti ei tarjoa toimintoja strukturoiduille lokeille. Strukturoidut lokipaketit tarjoavat toimintoja, jotka yksinkertaistavat ja parantavat kirjausprosessia. Go-ekosysteemissä on monia tällaisia ​​paketteja.

1. Uberin Zap

Zap on Uberin avoimen lähdekoodin tiimin rakentama nopea, jäsennelty, tasoitettu lokipaketti lokien kirjoittamiseen Gossa. Uber rakensi Zap-paketin tarjoamaan tehokkaampaa kirjaamista kuin muut Go-ekosysteemin paketit, mukaan lukien

Hirsi paketti.

Zap-paketissa on kaksi erillistä loggeria. The Kirjaaja toiminto käsittelee kriittisiä suorituskykytapauksia. The SugaredLogger tarjoaa enemmän joustavuutta printf-tyylisellä API: lla, mutta se sisältää pienen kompromissin suorituskyvyssä. Jopa hitaampi SugaredLogger-paketti on 4-10 kertaa nopeampi kuin muut strukturoidut lokipaketit.

Asenna Zap-paketti suorittamalla seuraava komentorivillä:

mennä get -u mennä.uber.org/zap

Tarvitset Go-sovelluksen uusimman version asentaaksesi ja käyttääksesi Zap-paketin toimintoja onnistuneesti.

logger, err := zap. Uusi tuotanto() // zap loggerin esiintymä

jos virhe! = nolla {
fmt. Println (err. Virhe())
}

lykätä metsuri. Sync() // huuhtelee puskurit, jos sellaisia ​​on
sokeri := metsuri. Sokeri () //sokeroitu kirjaaja täällä

sokeria. Infow("URL-osoite epäonnistui",
// Strukturoitu konteksti löyhästi kirjoitettuina avainarvo-pareina.
"url", url,
"yrittää", 3,
"perääntyminen", aika. Toinen,
)

sokeria. Infof("URL-osoitteen nouto epäonnistui: %s", URL) // käyttämällä printf-tyylin muotoilijaa

The metsuri muuttuja on esimerkki zap logger ja Sokeri menetelmä on sokeroitu logger-instanssi.

The Infow menetelmä kirjoittaa lähtöön, ja Infof on muotoilun versio Infow menetelmä.

2. Logrus-paketti

Logrus on jäsennelty lokipaketti Go-sovelluksille. Logrus on yhteensopiva tavallisen kirjastologgerin kanssa samanlaisilla toiminnoilla. Jos sinulla on kokemusta käytöstä Hirsi paketin, löydät sviitin, joka toimii Logrusin kanssa.

Logrus ei tue oletuksena JSON-muotoilua. Mutta voit aina käyttää JSON-kirjastoa, kuten sisäänrakennettua json paketti Logrusin kanssa SetFormatter menetelmä.

Logrus tukee kirjaamista eri tasoilla, ja vaikka se ei ole yhtä tehokas kuin useimmat kirjauspaketit, se on monipuolinen ja turvallinen.

Voit käyttää tätä komentoa Logrusin asentamiseen työhakemistoosi:

mennä Hanki github.com/sirupsen/logrus

Tässä on esimerkki Logrus-paketin kirjautumisesta.

tuonti (
"os"
kirjaa "github.com/sirupsen/logrus" // aliaksen tuonti
)

funcpää {
Hirsi. SetFormatter(&log. JSONFormatter{}) // aseta muotoilijaksi JSON
Hirsi. SetOutput (os. Stdout) // lähtö vakiolähtöön
Hirsi. SetLevel (loki. WarnLevel) // aseta varoitustaso

Hirsi. With Fields (loki. Kentät{
"Nimi": "John Doe",
"Ikä": 40,
}). Info("Johnin elämätiedot")
}

Tämä koodi tuo Logrus-kirjaston ja luo sille aliaksen nimeltä Hirsi. Vuonna pää toiminto, se kutsuu SetFormatter tapa määrittää lokien muotoilu. Voit käyttää SetOutput menetelmä määrittää, minne lokiviestit lähetetään; tässä tapauksessa vakiolähtö.

The SetLevel menetelmä kirjaa varoitukset määritetyllä tai korkeammalla tasolla.

3. ZeroLog-paketti

ZeroLog on Zap-vaikutteinen, nopea, JSON-omistettu kirjauskirjasto, joka on suunniteltu suorituskykyä varten. Se käyttää ainutlaatuista ketjutussovellusliittymää, jonka avulla Zerolog voi kirjoittaa JSON: ia ja kirjata tapahtumia ilman varauksia ja heijastuksia.

Zerolog pyrkii tarjoamaan helpommin käytettävän API: n ja paremman suorituskyvyn pitäen samalla koodipohjan ja API: n yksinkertaisena. Se keskittyy strukturoituun kirjaamiseen ja voit käyttää ConsoleWriter tapa kirjautua sisään konsoliisi.

Zerolog-paketissa on alhainen allokointi, tasoitettu kirjaus, näytteenotto, koukut, kontekstuaaliset kentät ja virheloki, jossa on valinnaisia ​​pinonjäljitysominaisuuksia. Voit myös integroida Zerologin yhteydessä ja http paketteja.

Suorita tämä komento työtilasi päätteessä asentaaksesi Zerolog paketti.

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

Tässä on yksinkertainen esimerkki Zerolog-paketin käyttämisestä yksinkertaiseen toimintoon.

tuonti (
"github.com/rs/zerolog" // zerolog konfiguroinneille
"github.com/rs/zerolog/log" // loki kirjaamista varten
)

funcpää() {
// UNIX-aika on nopeampi ja pienempi kuin useimmat aikaleimat
zerolog. TimeFieldFormat = zerolog. TimeFormatUnix

Hirsi. Tulosta ("hei maailma")
}

The TimeFieldFormat -vaihtoehto on asetettu Unix-aikamuotoon, ja Tulosta komento kirjoittaa tekstiargumentin vakiotulosteeseen.

4. Log15-paketti

The Loki15 paketti on yksinkertainen mielipiteillä varustettu työkalupakki ihmisen ja koneellisesti luettavaan kirjaamiseen Go: n parhailla käytännöillä. Log15 mallit io ja http paketit Go-standardikirjastosta vaihtoehtona sisäänrakennetulle Hirsi paketti.

Log15-paketin ominaisuudet sisältävät:

  • yksinkertainen, helposti ymmärrettävä API
  • strukturoitu kirjaus avainarvoparien avulla
  • lapsimetsurit yksityisellä kontekstilla
  • Käsittelijän käyttöliittymä mukautettujen lokimääritysten rakentamiseen pienen API: n kautta
  • värillinen päätetuki
  • sisäänrakennettu tuki tiedostojen, tietovirtojen, järjestelmälokien ja verkkolokien kirjaamiseen
  • puskuroi tietueet ulostuloon.

Voit asentaa Loki15 Go-paketteihisi tällä komennolla.

mennä Hanki github.com/inconshreveable/log15

Log15-paketin käytön aloittaminen on helppoa. Tässä on esimerkki loggerin luomisesta ja tietojen ja virhetasojen kirjautumisesta paketin avulla.

tuonti (
kirjaa "github.com/inconshreveable/log15" // alias tuonti lokina
)

funcpää() {
serverLog := loki. New("arkisto", "Uusi arkisto") // instantiating logger
serverLog. Info("arkistokerroksen kuntotarkastus onnistui") // tietoloki
serverLog. Virhe ("arkistokerroksen kuntotarkastus epäonnistui") // virheloki
}

The serverLog muuttuja on Log15-loggerin esiintymä; the Uusi -menetelmä palauttaa loggerin antamiesi kontekstiargumenttien kanssa.

The Tiedot menetelmä palauttaa infoviestin ja Virhe menetelmä palauttaa virheilmoituksen.

Kirjoita hyödyllisiä ja ymmärrettäviä lokeja

Kirjaaminen voi olla yhtä kriittistä kuin mikä tahansa muu kehitysprosessin osa. Se voi tuntua alkuvaiheessa erittäin helpolta, mutta olennaisten käytäntöjen noudattaminen voi monimutkaistaa prosessia. Jotta voit käsitellä kaikkia puunkorjuun tapauksia ja näkökohtia, sinun tulee käyttää lokipakettia asioiden helpottamiseksi.

Käytä kirjaustasoja, rakennetta ja kontekstia tehdäksesi lokeistasi ymmärrettäviä ja sopivia aiottuun tarkoitukseen.