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 productionfurcsa é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.

Eseményszintek listája

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. log4jA 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 DEBUGtartjá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 debuga 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 INFOegyszerű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 WARNfigyelmezteté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. FatalPé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.