3.1 Eseményszintek listája
A naplózás a program futása közben bekövetkező események rögzítésének folyamata. Programozóként az a kötelessége record everything important
, hogy ha production
furcsa és/vagy súlyos hibák vannak, akkor ezeken a naplókon kívül semmi más nem lesz.
Bármely hiba sokszor gyorsabban kiküszöbölhető, ha minden információval rendelkezik róla és a hívások előzményeiről. De innen egy egyszerű következtetés következik - általánosságban mindent naplózni: minden módszer hívása, minden paraméter értéke.
Ez sem választható – a túl sok információ éppoly rossz, mint a túl kevés. Intelligens naplózásra van szükségünk. Ember alkotta az embernek. És itt elérkeztünk az első tényhez a naplózásról - a napló minden bejegyzése kategóriákra van osztva, még a létrehozásukkor is.

A programozónak, amikor eseményt ír a naplóba, magának kell eldöntenie, mennyire fontos ez az információ. Az esemény súlyossági szintjét az üzenet szerzője választja meg. log4j
A naplózott információk fontosságának 5 szintje van :
DEBUG
INFO
WARN
ERROR
FATAL
Az alábbiakban részletesebben beszélünk róluk.
3.2 HIBAKERESÉS
A szintet DEBUG
tartják a legkevésbé fontosnak. A naplóba ilyen fontossági szinttel írt információkra csak az alkalmazások hibakeresése során van szükség. A hibakeresés során szükséges információk naplózásához a módszert használjuk debug()
.
Példa:
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;
}
}
}
Figyelem, a metódus debug
a metódus legelején van (a metódusnak még nem volt ideje semmit csinálni), és a metódusnak átadott változó értékét írja a naplóba. Ez a módszer leggyakrabban használt esete debug()
.
3.3 INFORMÁCIÓ és FIGYELMEZTETÉS
A következő két szint a INFO
és WARN
. Két módszer létezik rájuk – info()
és warn()
.
A szintet INFO
egyszerűen információs üzenetekre használják: ez és ez történik. Amikor elkezdi elemezni a naplóban lévő hibát, nagyon hasznos lehet elolvasni a hátterét. A módszer erre tökéletes info()
.
A szint WARN
figyelmeztetések írására szolgál (a figyelmeztetés szóból ). Általában ilyen fontossági szint mellett olyan információkat írnak ki, hogy valami elromlott, de a program tudja, mit kell tennie ebben a helyzetben.
Például egy fájl lemezre írásakor kiderült, hogy ilyen fájl már létezik. Itt a program naplózhat egy figyelmeztetést (figyelmeztetést), de megjelenít egy párbeszédpanelt a felhasználónak, és felajánlja egy másik fájlnév kiválasztását.
Példa:
class FileManager {
private static final Logger logger = LoggerFactory.getLogger(FileManager.class);
public boolean saveFile(FileData file) {
logger.info(“save the file ” + file.getName());
boolean resultOK = SaveUtils.save(file);
if (resultOK) return true;
logger.warn(“file writing problem ” + file.getName());
String filename = Dialog.selectFile();
boolean result = SaveUtils.save(file, filename);
return result;
}
3.4 HIBA és VÉGZETES
Végül a két legfontosabb naplózási szint a ERROR
és FATAL
. Számukra is léteznek azonos nevű speciális módszerek: error()
és fatal()
.
Úgy döntöttek továbbá, hogy a hibákat két kategóriába sorolják – hétköznapi hibákra és végzetes hibákra . A végzetes hiba leggyakrabban alkalmazás-összeomlást (asztali alkalmazásoknál) vagy webszolgáltatás-összeomlást (webes alkalmazásoknál) eredményez.
Egy másik jó példa a Windows operációs rendszer. Ha a programod most összeomlott, akkor az operációs rendszer szempontjából ez a Error
. És ha maga az operációs rendszer leesett, és a Windows halál kék képernyőjét látja, akkor ez már Fatal error
.
A Java alkalmazásokban az eseményeket leggyakrabban felvetett kivételekkel társítják Error
. Fatal
Példa:
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;
}
}
}
3.5 Mit kell naplózni
Persze nem érdemes mindent sorban naplózni. A legtöbb esetben ez erősen rontja a napló olvashatóságát, és végül is a napló először azért íródik, hogy olvasható legyen.
Ezenkívül nem írhat különféle személyes és pénzügyi információkat a naplóba. Most ezzel szigorúan és egyszerűen pénzbírságokba vagy perekbe ütközhet. Előbb-utóbb egy ilyen rönk oldalra szivárog, és akkor nem lesz probléma.
Tehát mit kell naplózni?
Először naplóznia kell az alkalmazás kezdetét . Az alkalmazás indítása után ajánlott naplózni a működési módját és a különböző fontos beállításokat – ez megkönnyíti a napló olvasását a jövőben.
Másodszor, naplóznia kell az összes olyan harmadik féltől származó szolgáltatás állapotát, amellyel az alkalmazás működik: levelezőrendszerek, bármilyen külső szolgáltatás. Legalább a csatlakozás pillanatát biztosítania kell, hogy megbizonyosodjon arról, hogy megfelelően működnek.
Harmadszor, minden kivételt naplózni kell . Ha elvárják őket, akkor kompakt információk írhatók le róluk. A kivételekről szóló teljes információ a hiba keresésekor a fontos információk 50–80%-át adja.
Az alkalmazás leállítását is naplózni kell . Az alkalmazásnak rendesen le kell állnia, és nem dobhat tucatnyi hibát a naplóba. Ezen a helyen gyakran találhat elakadt feladatokat, problémákat a szálkészlettel vagy az ideiglenes fájlok törlésével kapcsolatos problémákat.
Mindenképpen naplózzon mindent, ami a biztonsággal és a felhasználói jogosultságokkal kapcsolatos . Ha egy felhasználó egymás után 10 alkalommal próbál bejelentkezni vagy visszaállítani a jelszavát, ennek az információnak meg kell jelennie a naplókban.
A lehető legtöbb információt naplózza az aszinkron feladatokról – a kivételek gyakran elvesznek az ilyen szálaknál. Aszinkron feladat esetén mindenképpen naplózza a kezdetét és a végét. A sikeres befejezést ugyanúgy naplózni kell, mint a problémásat.
Mi más? Időzített feladatok indítása, tárolt feladatok indítása SQL-procedures
, adatok szinkronizálása, minden, ami az elosztott tranzakciókkal kapcsolatos. Kezdésnek szerintem ennyi elég is. A jövőben bővíteni fogja ezt a listát.
GO TO FULL VERSION