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.

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()
.
GO TO FULL VERSION