Loggen is de techniek om gegevens bij te houden voor toekomstige doeleinden in de softwareontwikkelingscyclus. Logboekregistratie is van cruciaal belang omdat logboeken helpen bij foutopsporing, diagnose, probleemoplossing en projectbewaking.
U kunt logboekregistratie op verschillende niveaus van uw toepassingen gebruiken voor fouten, waarschuwingen, foutopsporing en meer.
Inloggen Go
De Go-standaardbibliotheek bevat een log pakket rijk aan functionaliteit. Het behandelt verschillende logboekniveaus en basisregistratiegerelateerde methoden die u nodig hebt voor uw toepassing. echter, de log pakket is misschien niet de beste keuze als uw app complex is en u prioriteit wilt geven aan productiviteit.
De log pakket biedt geen functionaliteit voor gestructureerde logboeken. Gestructureerde logpakketten bieden functionaliteit die het logproces vereenvoudigt en verbetert. Het Go-ecosysteem herbergt veel van dergelijke pakketten.
1. Zap door Uber
Zap is een snel, gestructureerd, genivelleerd logboekpakket gebouwd door het open-sourceteam van Uber voor het schrijven van logboeken in Go. Uber bouwde het Zap-pakket om meer performante logging te bieden dan andere pakketten in het Go-ecosysteem, inclusief de
log pakket.Er zijn twee verschillende loggers in het Zap-pakket. De Logger functie behandelt kritieke prestatiegevallen. De Gesuikerde Logger biedt meer flexibiliteit met zijn printf-stijl API, maar het komt met een kleine inruil in prestaties. Zelfs het langzamere SugaredLogger-pakket is 4-10 keer sneller dan andere gestructureerde logging-pakketten.
Voer het volgende uit op een opdrachtregel om het Zap-pakket te installeren:
Gaan krijg -u Gaan.uber.org/zap
U hebt een recente versie van Go nodig om de functionaliteit van het Zap-pakket met succes te installeren en te gebruiken.
logger, err := zap. Nieuwe productie() // zap logger-instantie
als fout != nul {
fmt. Println (fout. Fout())
}verschuiven logger. Synchroniseren() // spoelt eventuele buffers door
suiker := logger. Suiker() // gesuikerde logger hiersuiker. Infow("kan URL niet ophalen",
// Gestructureerde context als losjes getypte sleutel-waardeparen.
"url", url,
"poging", 3,
"achteruit", tijd. Seconde,
)
suiker. Infof("Kan URL niet ophalen: %s", URL) // met behulp van de printf-stijl formatter
De logger variabele is een instantie van de zap logger, en de Suiker methode is een gesuikerde logger-instantie.
De Infow methode schrijft naar de uitvoer, en de Info is de opmaakversie van de Infow methode.
2. Het Logrus-pakket
Logrus is een gestructureerd logpakket voor Go-apps. Logrus is compatibel met de standaard bibliotheeklogger, met vergelijkbare functionaliteit. Als je ervaring hebt met het gebruik van de log pakket, vindt u een suite die met Logrus werkt.
Logrus ondersteunt standaard geen JSON-opmaak. Maar je kunt altijd een JSON-bibliotheek gebruiken, zoals de ingebouwde json pakket met Logrus’ Opmaak instellen methode.
Logrus ondersteunt loggen op verschillende niveaus en hoewel het niet zo krachtig is als de meeste logpakketten, is het rijk aan functies en veilig.
U kunt deze opdracht gebruiken om Logrus in uw werkmap te installeren:
Gaan download github.com/sirupsen/logrus
Hier is een voorbeeld van loggen met het Logrus-pakket.
importeren (
"os"
log "github.com/sirupsen/logrus" // alias import
)funchoofd {
logboek. SetFormatter(&log. JSONFormatter{}) // zet formatter op JSON
logboek. Uitvoer instellen (os. Stout) // output naar standaard output
logboek. SetLevel (log. WarnLevel) // stel waarschuwingsniveau in
logboek. WithFields (log. Velden{
"Naam": "John Doe",
"Leeftijd": 40,
}).Info("John's bio-gegevens")
}
Deze code importeert de Logrus-bibliotheek en maakt er een alias voor met de naam logboek. In de hoofd functie, het roept de Opmaak instellen methode om een formatter voor de logboeken in te stellen. U kunt de Uitvoer instellen methode om aan te geven waar logberichten moeten komen; in dit geval standaarduitvoer.
De SetLevel methode logt waarschuwingen in het opgegeven niveau of hoger.
3. ZeroLog-pakket
ZeroLog is een op Zap geïnspireerde, snelle, JSON-specifieke bibliotheek voor logging, ontworpen voor prestaties. Het maakt gebruik van een unieke chaining-API waarmee Zerolog JSON kan schrijven en gebeurtenissen kan loggen zonder toewijzingen en reflecties.
Zerolog streeft naar een gebruiksvriendelijkere API en hogere prestaties, terwijl de codebasis en API eenvoudig blijven. Het richt zich op gestructureerde logging en u kunt de ConsoleWriter methode om behoorlijk in te loggen op je console.
Er is een lage toewijzing, genivelleerde logboekregistratie, bemonstering, hooks, contextuele velden en foutregistratie met optionele stacktrace-functies op het Zerolog-pakket. U kunt Zerolog ook integreren met de context en http pakketjes.
Voer deze opdracht uit in de terminal van uw werkruimte om de. te installeren nullog pakket.
Gaan get -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)
Hier is een eenvoudig voorbeeld van het gebruik van het Zerolog-pakket voor een eenvoudige bewerking.
importeren (
"github.com/rs/zerolog" // zerolog voor configuraties
"github.com/rs/zerolog/log" // log om te loggen
)funchoofd() {
// UNIX-tijd is sneller en kleiner dan de meeste tijdstempels
nullog. TimeFieldFormat = nullog. TijdFormaatUnix
logboek. Afdrukken ("hallo wereld")
}
De TijdVeldFormaat optie is ingesteld op het Unix-tijdformaat, en de Afdrukken commando schrijft het tekstargument naar de standaarduitvoer.
4. Het Log15-pakket
De Log15 package is een eenvoudige, eigenzinnige toolkit voor door mensen en machines leesbare logging met best practices in Go. Log15 modellen de io en http pakketten uit de Go-standaardbibliotheek als alternatief voor de ingebouwde log pakket.
De kenmerken van het Log15-pakket zijn onder meer:
- een eenvoudige, gemakkelijk te begrijpen API
- gestructureerde logboekregistratie met sleutel-waardeparen
- kindloggers met privé-context
- handler-interface voor het maken van aangepaste logboekconfiguraties via een kleine API
- gekleurde terminal ondersteuning
- ingebouwde ondersteuning voor het loggen naar bestanden, streams, systeemlogboeken en netwerklogboeken
- records bufferen om uit te voeren.
U kunt installeren Log15 naar uw Go-pakketten met deze opdracht.
Gaan download github.com/inconshreveable/log15
Met het Log15 pakket is het eenvoudig om aan de slag te gaan. Hier is een voorbeeld van het instantiëren van een logger en het inloggen op info- en foutniveaus met het pakket.
importeren (
log "github.com/inconshreveable/log15" // alias importeren als log
)
funchoofd() {
serverLog := log. Nieuw("repository", "nieuwe opslagplaats") // instantiëren van logger
serverLog. Info("repository layer health check geslaagd") // infolog
serverLog. Error ("repository layer health check failed") // foutenlogboek
}
De serverLog variabele is een instantie van de Log15-logger; de Nieuw methode retourneert een logger met de contextargumenten die u opgeeft.
De Info methode retourneert een info-bericht, en de Fout methode retourneert een foutmelding.
Nuttige en begrijpelijke logboeken schrijven
Loggen kan net zo cruciaal zijn als elk ander onderdeel van het ontwikkelingsproces. Het lijkt misschien heel gemakkelijk in de beginfase, maar vasthouden aan essentiële praktijken kan het proces bemoeilijken. Om elke edge-case en elk aspect van logging af te handelen, moet u een logging-pakket gebruiken om dingen gemakkelijker te maken.
Gebruik logboekniveaus, structuur en context om uw logboeken begrijpelijk en geschikt te maken voor hun beoogde doeleinden.