1.1 Introduktion til logs

Loggen er en liste over hændelser, der har fundet sted. Næsten som en nautisk dagbog eller dagbog. Tja, derfor er en logger et objekt, som du kan logge med. I programmering er det sædvanligt at logge næsten alt. Og i Java er alt sådan og endda lidt mere.

logger java

Faktum er, at Java-programmer meget ofte er store serverapplikationer uden brugergrænseflade, konsol og så videre. De behandler anmodninger fra tusindvis af brugere på samme tid, og ofte opstår der forskellige fejl. Især når forskellige tråde begynder at forstyrre hinanden.

Og faktisk er den eneste måde at finde sjældent gengivet fejl og fejl i en sådan situation at skrive til loggen/filen alt , hvad der sker i hver tråd.

Oftest skrives information til loggen om parametrene for den metode, den blev kaldt, alle de opsnappede fejl og en masse mellemliggende information. Jo mere komplet loggen er, jo lettere er det at gendanne hændelsesforløbet og spore årsagerne til en fejl eller fejl.

Men jo større træstammen er, jo sværere er det at arbejde med den. Nogle gange når logfilerne flere gigabyte om dagen. Det er fint.

1.2 Mislykkede logfiler

Som de første logfiler brugte udviklerne blot output til konsollen . Det er praktisk at gøre dette under applikationsfejlfinding - når alle vigtige oplysninger og variable værdier er skrevet til konsollen. Men sådan en log er fuldstændig uanvendelig under den normale drift af applikationen.

For det første vil applikationen muligvis udsende noget til selve konsollen, og brugeren ønsker slet ikke at se de serviceoplysninger, der er beregnet til programmøren.

For det andet er størrelsen på konsolbufferen begrænset, du kan ikke skrive meget der.

Og endelig skal der for det tredje sendes information om programfejl, der indsamles over længere tid, til programudviklerne. Og det er mest bekvemt at skrive alle disse oplysninger på én gang til en fil.

Udviklerne løste hurtigt det første problem - de kom med en anden outputstrøm - System.err. Du kan skrive beskeder til den, og de vil blive sendt til en separat tråd og ikke til standardkonsollen.

Og selv problemet med at skrive til en fil blev 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 form løste det ikke hele problemet, så det blev besluttet at oprette et særligt bibliotek, der kunne skrive logbeskeder til en fil. Hun gjorde det på en smart måde og tillod fleksibiliteten til at konfigurere filtre til loggede hændelser og data.

Hele logningsprocessen består faktisk af tre dele:

  • Den første del er informationsindsamling .
  • Den anden del er filtreringen af ​​den indsamlede information.
  • Den tredje del er registreringen af ​​den valgte information.

1.3 Introduktion til log4j loggeren

Den første populære logger i Java-fællesskabet var log4j. Det er meget enkelt at inkludere det i projektet, for dette skal du blot tilføje et par linjer til din pom.xml


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

Samspillet mellem dit program og en sådan logger ville se sådan ud:

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 sker her:

Oprettelsen af ​​objektet er fremhævet med grønt Logger . Dens objekt er gemt i en statisk variabel for praktisk videre arbejde med det. Og også getLogger()oplysninger om den klasse, hvori oplysningerne er indsamlet, videregives til metoden.

Linjen fremhævet med blåt er, hvor vi kun logger information af værdi under fejlfinding . Til dette bruges en speciel metode -debug()

Og endelig er linjen, hvor vi gemmer undtagelsen, der er opstået til loggen, fremhævet med rødt . Undtagelser er potentielle fejl, så error().