1.1 Introduksjon til logger

Loggen er en liste over hendelser som har skjedd. Nesten som en nautisk dagbok eller dagbok. Vel, følgelig er en logger et objekt du kan logge med. I programmering er det vanlig å logge nesten alt. Og i Java er alt slik og enda litt til.

logger java

Faktum er at Java-programmer veldig ofte er store serverapplikasjoner uten brukergrensesnitt, konsoll og så videre. De behandler forespørsler fra tusenvis av brukere samtidig og ofte oppstår ulike feil. Spesielt når forskjellige tråder begynner å forstyrre hverandre.

Og faktisk er den eneste måten å finne sjelden reproduserte feil og feil i en slik situasjon å skrive til loggen/filen alt som skjer i hver tråd.

Oftest skrives informasjon til loggen om parametrene til metoden den ble kalt, alle de avlyttede feilene og mye mellominformasjon. Jo mer fullstendig loggen er, desto lettere er det å gjenopprette hendelsesforløpet og spore årsakene til en feil eller feil.

Men jo større stokken er, desto vanskeligere er det å jobbe med den. Noen ganger når loggene flere gigabyte per dag. Dette er greit.

1.2 Mislykkede logger

Som de første loggene brukte utviklerne ganske enkelt utdata til konsollen . Det er praktisk å gjøre dette under applikasjonsfeilsøking - når all viktig informasjon og variabelverdier er skrevet til konsollen. Men en slik logg er helt ubrukelig under normal drift av applikasjonen.

For det første kan det hende at applikasjonen vil sende ut noe til selve konsollen, og brukeren vil ikke se tjenesteinformasjonen som er beregnet på programmereren i det hele tatt.

For det andre er størrelsen på konsollbufferen begrenset, du kan ikke skrive mye der.

Og til slutt, for det tredje, bør informasjon om programfeil som samles inn over lang tid sendes til programutviklerne. Og det er mest praktisk å skrive all denne informasjonen på en gang til en fil.

Utviklerne løste raskt det første problemet - de kom opp med en annen utgangsstrøm - System.err. Du kan skrive meldinger til den, og de vil bli sendt til en egen tråd, og ikke til standardkonsollen.

Og til og med problemet med å skrive til en fil ble løst:

// Define the file to which we will write the log
System.setErr(new PrintStream(new File("log.txt")));
// Display messages
System.err.println("Message 1");
System.err.println("Message 2");
// Display an error message
try {
    throw new Exception("Error message");
} catch (Exception e) {
    e.printStackTrace();
}

Men selv i denne formen løste det ikke hele problemet, så det ble besluttet å opprette et spesielt bibliotek som skulle skrive loggmeldinger til en fil. Hun gjorde det på en smart måte og tillot fleksibiliteten til å konfigurere filtre for loggede hendelser og data.

Hele loggingsprosessen består faktisk av tre deler:

  • Den første delen er informasjonsinnhenting .
  • Den andre delen er filtreringen av den innsamlede informasjonen.
  • Den tredje delen er registreringen av den valgte informasjonen.

1.3 Introduksjon til log4j-loggeren

Den første populære loggeren i Java-fellesskapet var log4j. Det er veldig enkelt å inkludere det i prosjektet, for dette trenger du bare å legge til et par linjer i pom.xml


<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>2.2.17</version>
</dependency>

Samspillet mellom programmet og en slik logger vil se omtrent slik ut:

class Manager {
   private static final Logger logger = LoggerFactory.getLogger(Manager.class);

   public boolean processTask(Task task) {
        logger.debug("processTask id = " + task.getId());
        try {
            task.start();
            task.progress();
            task.complete();
            return true;
        } catch (Exception e) {
            logger.error("Unknown error", e);
            return false;
        }
    }
}

Tre ting skjer her:

Opprettelsen av objektet er uthevet i grønt Logger . Objektet er lagret i en statisk variabel for praktisk videre arbeid med det. Og også getLogger()informasjon om klassen der informasjonen er samlet inn, sendes til metoden.

Linjen uthevet i blått er der vi logger informasjon av verdi kun under feilsøking . For dette brukes en spesiell metode -debug()

Og til slutt er linjen der vi lagrer unntaket som har oppstått i loggen markert med rødt . Unntak er potensielle feil, så error().