In de letterlijke betekenis van Oxford Dictionary, kan het woord “log” worden gedefinieerd als “een officieel verslag van gebeurtenissen gedurende een bepaalde periode, in het bijzonder een reis op een schip of vliegtuig”. In de programmeerwereld gebruiken programmeurs deze term ook om een logboek bij te houden van belangrijke gebeurtenissen en activiteiten die van belang zijn om een programma goed te laten lopen. De activiteit of het maken van een log heet logging en het gereedschap om zo’n taak uit te voeren heet een logger.
Het log wordt gedocumenteerd in een bestand dat Log File wordt genoemd. In de computerprogrammeursterm kan een logbestand worden omschreven als
een bestand dat een register bijhoudt van gebeurtenissen, processen, berichten, en communicatie tussen verschillende communicerende softwareapplicaties en het besturingssysteem. Logbestanden zijn aanwezig in uitvoerbare software, besturingssystemen en programma’s waarin alle berichten en procesdetails worden vastgelegd. Elk uitvoerbaar bestand produceert een logbestand waarin alle activiteiten worden genoteerd.
– Technopedia
Een logbestand is belangrijk voor ons programmeurs om belangrijke gebeurtenissen bij te houden voor bepaalde gevallen, zoals debuggen, evaluatie en controle. In dit artikel wil ik een manier delen om een eenvoudig logger pakket te maken dat aan de server-kant met Golang kan worden geïmplementeerd.
Logger Pakket in Golang
Onze code begint met het declareren van een pakket clausule met de naam “logger” en het importeren van de vereiste pakketten: “fmt”, “log”, “os” en “path/filepath”. We zullen twee types logger gebruiken: Algemeen logboek en Foutenlogboek. De eerste wordt gebruikt om veelvoorkomende gebeurtenissen te loggen, zoals inloggen, uitloggen, opgehaalde gegevens, geposte gegevens, enz. Anderzijds wordt de laatste gebruikt om specifiek te loggen voor foutgebeurtenissen. In zijn kern, is onze logger gebouwd op een log object. Daarom maken we twee variabelen “CommonLog” en “ErrorLog” (merk op dat de eerste letter in hoofdletters is om aan te geven dat de variabele wordt geëxporteerd) met een pointer naar de logger struct.
package loggerimport (
"fmt"
"log"
"os"
"path/filepath"
)var CommonLog *log.Loggervar ErrorLog *log.Logger
Volgende, zullen we onze logger starten. Laten we beginnen met het verklaren van het bestandspad. Dat doen we door de locatie van ons logbestand aan te wijzen met het Abs commando uit het bestandspad pakket (in dit geval gebruiken we de absolute locatie van het logbestand). We houden de verwijzing in de filePath variabele.
In de init functie, gaan we verder met het instellen van het commando dat zal worden uitgevoerd wanneer het logbestand wordt geopend door het programma (deze instelling wordt verwezen in de openLogfile variabele). We doen dit met het “OpenFile” commando uit het “os” pakket door het bestandspad op te geven (met behulp van onze “filePath” variabele met toevoeging van de bestandsnaam), de vlaggen en fileMode. In dit deel moeten we ook de naam van het logbestand bepalen; in dit artikel noemen we het logbestand log.log (let op de log-extensie). Let vooral op de flags en de fileMode die in de functie gebruikt worden. In dit geval kunnen de vlaggen worden omschreven als indicatoren die het programma vertellen wat het moet doen met het geopende bestand. Voor dat doel gebruiken we de voorgedefinieerde constante uit het “os” pakket:
- os.0_RDWR = open het bestand read-write
- os.0_CREATE = maak een nieuw bestand als er geen bestaat
- os.0_APPEND = voeg gegevens toe aan het bestand bij het schrijven
Tussen is de fileMode “0666” de code om de standaard bestandspermissie in te stellen om het bestand te wijzigen (verdere lectuur over gebruikerspermissie kan hier worden gezien).
Verder zullen we onze CommonLog en ErrorLog variabele herschrijven om een nieuw log te bevatten. We doen dit met het “New” commando uit het “log” pakket door 1) het kanaal voor het logbestand, 2) een prefix en vereist 3) vlaggen op te geven.
- Kanaal voor het logbestand: we gebruiken hier onze openLogfile variabele
- Prefix: Dit is de identificatie van ons logbestand. We kunnen een aangepaste string gebruiken om het type log te definiëren (bijv. “CommonLogger” of “ErrorLogger”)
- Flags: De vlaggen voor deze functie geven de informatie aan die we in onze log willen hebben. Voor dit doel gebruiken we de ingebouwde functie van het log pakket in Go (detail is hier te zien).
Injecteren Logger in onze code
Ten slotte kunnen we onze logger injecteren om belangrijke gebeurtenissen die in ons programma gebeuren te loggen. Dit kan worden gedaan door gebruik te maken van het “Prinln” commando zoals we dat hebben gebruikt met het “fmt” pakket.
Hier in het log bestand, zal het resultaat van de logger er als volgt uitzien:
Het is klaar!
Zo, dat is het jongens! We hebben een logger pakket gemaakt dat gemakkelijk kan worden geïnjecteerd als een afhankelijkheid in ons Go programma. Hopelijk, kan het nuttig zijn voor jullie mede-programmeurs.