1.1 Introducere în jurnalele

Jurnalul este o listă de evenimente care au avut loc. Aproape ca un jurnal sau jurnal nautic. Ei bine, în consecință, un logger este un obiect cu care te poți autentifica. În programare, se obișnuiește să înregistrezi aproape totul. Și în Java, totul este așa și chiar puțin mai mult.

logger java

Faptul este că programele Java sunt foarte adesea aplicații de server mari fără interfață de utilizare, consolă și așa mai departe. Ei procesează cererile de la mii de utilizatori în același timp și adesea apar diverse erori. Mai ales atunci când fire diferite încep să interfereze între ele.

Și, de fapt, singura modalitate de a găsi erori și eșecuri rareori reproduse într-o astfel de situație este să scrieți în jurnal / fișier tot ce se întâmplă în fiecare fir.

Cel mai adesea, informațiile sunt scrise în jurnal despre parametrii metodei cu care a fost apelată, toate erorile interceptate și multe informații intermediare. Cu cât este mai complet jurnalul, cu atât este mai ușor să restabiliți succesiunea evenimentelor și să urmăriți cauzele unei eșecuri sau erori.

Dar cu cât este mai mare bustenul, cu atât este mai dificil să lucrezi cu el. Uneori, jurnalele ajung la câțiva gigaocteți pe zi. Este în regulă.

1.2 Jurnalele eșuate

Ca primele jurnale, dezvoltatorii au folosit pur și simplu ieșirea către consolă . Este convenabil să faceți acest lucru în timpul depanării aplicației - când toate informațiile importante și valorile variabilelor sunt scrise în consolă. Dar un astfel de jurnal este complet inaplicabil în timpul funcționării normale a aplicației.

În primul rând, aplicația poate dori să scoată ceva către consola însăși, iar utilizatorul nu dorește deloc să vadă informațiile de serviciu destinate programatorului.

În al doilea rând, dimensiunea buffer-ului consolei este limitată, nu poți scrie mult acolo.

Și, în sfârșit, în al treilea rând, informațiile despre erorile de program care sunt colectate pe o perioadă lungă de timp ar trebui trimise dezvoltatorilor de programe. Și cel mai convenabil este să scrieți toate aceste informații simultan într-un fișier.

Dezvoltatorii au rezolvat rapid prima problemă - au venit cu un alt flux de ieșire - System.err. Puteți scrie mesaje în el și acestea vor fi trimise într-un fir separat, și nu către consola standard.

Și chiar și problema cu scrierea într-un fișier a fost rezolvată:

// 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();
}

Dar chiar și în această formă, nu a rezolvat întreaga problemă, așa că s-a decis să se creeze o bibliotecă specială care să scrie mesaje de jurnal într-un fișier. Ea a făcut-o într-un mod inteligent și a permis flexibilitatea de a configura filtre pentru evenimentele și datele înregistrate.

Întregul proces de înregistrare, de fapt, constă din trei părți:

  • Prima parte este colectarea de informații .
  • A doua parte este filtrarea informațiilor colectate.
  • A treia parte este înregistrarea informațiilor selectate.

1.3 Introducere în logger-ul log4j

Primul logger popular din comunitatea Java a fost log4j. Includerea acestuia în proiect este foarte simplă, pentru aceasta trebuie să adăugați doar câteva rânduri la pom.xml.


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

Interacțiunea programului tău cu un astfel de logger ar arăta cam așa:

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;
        }
    }
}

Aici se întâmplă trei lucruri:

Crearea obiectului este evidențiată în verde Logger . Obiectul său este stocat într-o variabilă statică pentru a lucra în continuare convenabil cu acesta. Și, de asemenea, getLogger()informații despre clasa în care sunt colectate informațiile sunt transmise metodei.

Linia evidențiată în albastru este locul în care înregistrăm informații de valoare numai în timpul depanării . Pentru aceasta, se folosește o metodă specială -debug()

Și, în sfârșit, linia în care salvăm excepția apărută în jurnal este evidențiată cu roșu . Excepțiile sunt erori potențiale, deci error().