1.1 Bevezetés a naplókba

A napló a megtörtént események listája. Majdnem olyan, mint egy tengerészeti napló vagy napló. Nos, ennek megfelelően a logger egy olyan objektum, amellyel bejelentkezhet. A programozásban szinte mindent naplózni szokás. A Java-ban pedig minden ilyen és még egy kicsit több is.

logger java

A tény az, hogy a Java programok nagyon gyakran nagy szerveralkalmazások, amelyek nem tartalmaznak felhasználói felületet, konzolt stb. Egyszerre több ezer felhasználó kérését dolgozzák fel, és gyakran előfordulnak különféle hibák. Főleg, ha a különböző szálak kezdik zavarni egymást.

Valójában az egyetlen módja annak, hogy ilyen helyzetben ritkán reprodukálható hibákat és hibákat találjunk, az az, hogy mindent beírunk a naplóba / fájlba, ami az egyes szálakban történik.

Leggyakrabban információkat írnak a naplóba annak a metódusnak a paramétereiről, amellyel meghívták, az összes elfogott hibáról és sok köztes információról. Minél teljesebb a napló, annál könnyebben lehet visszaállítani az események sorrendjét és nyomon követni a hiba vagy hiba okát.

De minél nagyobb a rönk, annál nehezebb vele dolgozni. Néha a naplók elérik a napi több gigabájtot. Ez jó.

1.2 Sikertelen naplók

Az első naplózásként a fejlesztők egyszerűen a konzolra való kimenetet használták . Ezt kényelmesen megteheti az alkalmazás hibakeresése során - amikor minden fontos információ és változó érték be van írva a konzolba. De egy ilyen napló teljesen alkalmatlan az alkalmazás normál működése során.

Először is előfordulhat, hogy az alkalmazás szeretne valamit kiadni magának a konzolnak, és a felhasználó egyáltalán nem akarja látni a programozónak szánt szolgáltatási információkat.

Másodszor a konzolpuffer mérete korlátozott, oda nem nagyon lehet írni.

És végül, harmadszor, a programhibákkal kapcsolatos, hosszú időn keresztül gyűjtött információkat el kell küldeni a programfejlesztőknek. És a legkényelmesebb mindezt az információt egyszerre egy fájlba írni.

A fejlesztők gyorsan megoldották az első problémát – kitaláltak egy másik kimeneti adatfolyamot – System.err. Írhatsz rá üzeneteket, és azok egy külön szálba kerülnek elküldésre, nem a szabványos konzolra.

És még a fájlba írással kapcsolatos probléma is megoldódott:

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

De még ebben a formában sem oldotta meg az egész problémát, ezért úgy döntöttek, hogy létrehoznak egy speciális könyvtárat, amely naplóüzeneteket írna egy fájlba. Okos módon tette ezt, és rugalmasságot biztosított a naplózott események és adatok szűrőinek konfigurálásához.

A teljes naplózási folyamat valójában három részből áll:

  • Az első rész az információgyűjtés .
  • A második rész az összegyűjtött információk szűrése .
  • A harmadik rész a kiválasztott információk rögzítése .

1.3 A log4j logger bemutatása

A Java közösség első népszerű naplózója a log4j. A projektbe való felvétele nagyon egyszerű, ehhez csak néhány sort kell hozzáadnia a pom.xml fájlhoz


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

A program interakciója egy ilyen naplózóval valahogy így nézne ki:

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

Három dolog történik itt:

Az objektum létrehozása zöld színnel van kiemelve Logger . Az objektuma egy statikus változóban van tárolva a kényelmes további munka érdekében. És getLogger()az információgyűjtés osztályára vonatkozó információkat is átadják a metódusnak.

A kékkel kiemelt vonal az a hely, ahol csak a hibakeresés során naplózunk értéket . Ehhez egy speciális módszert alkalmaznak -debug()

És végül a sor, ahol a naplóba mentjük a felmerült kivételt, pirossal van kiemelve . Ez alól kivételt képeznek az esetleges hibák, ezért a error().