Med den bogstavelige betydning fra Oxford Dictionary kan ordet “log” defineres som “en officiel registrering af begivenheder i en bestemt periode, især en rejse på et skib eller et fly”. I programmeringsverdenen bruger programmører også dette udtryk til at føre en optegnelse over vigtige begivenheder og aktiviteter, der har betydning for, at et program kan køre korrekt. Aktiviteten eller oprettelsen af en log kaldes logning, og værktøjet til at udføre en sådan opgave kaldes en logger.
Loggen er dokumenteret i en fil kaldet logfilen. I computerprogrammørens termer kan en logfil beskrives som
en fil, der fører et register over hændelser, processer, meddelelser og kommunikation mellem forskellige kommunikerende softwareprogrammer og styresystemet. Logfiler findes i eksekverbar software, operativsystemer og programmer, hvorved alle meddelelser og procesoplysninger registreres. Hver eksekverbar fil producerer en logfil, hvor alle aktiviteter noteres.
– Technopedia
En logfil er vigtig for os programmører til at holde styr på vigtige begivenheder i visse tilfælde som f.eks. debugging, evaluering og overvågning. I denne artikel vil jeg gerne dele en måde at oprette en simpel loggerpakke, der skal implementeres på serversiden med Golang.
Loggerpakke i Golang
Vores kode starter med at deklarere en pakkeklausul ved navn “logger” og importere de nødvendige pakker: “fmt”, “log”, “os” og “path/filepath”. Vi vil bruge to typer af logger: Vi anvender to typer loggere: Common Log og Error Log. Den første bruges til at logge almindelige hændelser som f.eks. login, logout, hentede data, postdata osv. På den anden side bruges den sidste til at logge specifikt for fejlhændelser. I sin kerne er vores logger bygget på et logobjekt. Derfor vil vi oprette to variabler “CommonLog” og “ErrorLog” (bemærk, at det første bogstav er med store bogstaver for at angive, at variablen er eksporteret) med en pegepind til logger struct.
package loggerimport (
"fmt"
"log"
"os"
"path/filepath"
)var CommonLog *log.Loggervar ErrorLog *log.Logger
Næst vil vi igangsætte vores logger. Lad os starte med at deklarere filstien. Det gør vi ved at pege på placeringen af vores logfil ved hjælp af kommandoen Abs fra pakken file path (i dette tilfælde bruger vi den absolutte placering af logfilen). Vi beholder derefter henvisningen inden for variablen filePath.
Inden for init-funktionen fortsætter vi med at indstille den kommando, der skal udføres, når logfilen åbnes af programmet (denne indstilling refereres inden for variablen openLogfile). Vi gør dette med kommandoen “OpenFile” fra “os”-pakken ved at angive filstien (ved hjælp af vores “filePath”-variabel ud over filnavnet), flags og fileMode. I denne del skal vi også bestemme navnet på logfilen; i denne artikel navngiver vi logfilen som log.log (læg mærke til log-udvidelsen). Der skal lægges særlig vægt på de flags og fileMode, der anvendes i funktionen. I dette tilfælde kan Flags beskrives som indikatorer, der fortæller programmet, hvad det skal gøre med den åbnede fil. Til det formål bruger vi den foruddefinerede konstant fra “os”-pakken:
- os.0_RDWR = åbne filen read-write
- os.0_CREATE = oprette en ny fil, hvis der ikke findes nogen
- os.0_APPEND = vedhæft data til filen ved skrivning
Men fileMode “0666” er koden til at indstille Standard filtilladelse til at ændre filen (yderligere læsning om brugertilladelse kan ses her).
Dertil kommer, at vi vil omskrive vores CommonLog- og ErrorLog-variabel til at indeholde en ny log. Det gør vi med kommandoen “New” fra pakken “log” ved at angive 1) kanalen for logfilen, 2) et præfiks og påkrævet 3) flag.
- Kanal for logfilen: Vi bruger vores openLogfile-variabel her
- Prefiks: Dette er identifikatoren eller vores log. Vi kan bruge et brugerdefineret strengord til at definere typen af lof (dvs. “CommonLogger” eller “ErrorLogger”)
- Flags: Flags:: Flag for denne funktion angiver de oplysninger, som vi ønsker at have i vores log. Til dette formål bruger vi den indbyggede funktion fra log-pakken i Go (detaljer kan ses her).
Injicering af logger til vores kode
Sluttelig kan vi injicere vores logger til at logge vigtige hændelser, der sker i vores program. Dette kan gøres ved at bruge kommandoen “Prinln” ligesom den, vi brugte med “fmt”-pakken.
Her i logfilen vil resultatet af loggeren tage form som dette:
Det er gjort!
Så, det er det, gutter! vi har oprettet en logger-pakke, der nemt kan injiceres som en afhængighed i vores Go-program. Forhåbentlig kan det være nyttigt for jer andre programmører.