3.1 Lista nivelurilor de eveniment

Înregistrarea este procesul de înregistrare a oricăror evenimente care apar în timpul rulării programului. Datoria ta ca programator este record everything importantpentru ca atunci, atunci cand productionapar erori ciudate si/sau grave, nu vei avea nimic altceva in afara de aceste loguri.

Orice eroare va fi eliminata de multe ori mai repede daca ai toate informatiile despre ea si despre tot istoricul apelurilor. Dar de aici urmează o concluzie simplă - să înregistrați totul în general: apeluri ale tuturor metodelor, valori ale tuturor parametrilor.

Nici aceasta nu este o opțiune - prea multe informații sunt la fel de proaste ca și prea puține. Avem nevoie de logare inteligentă. Făcută de om pentru om. Și aici ajungem la primul fapt despre înregistrare - toate intrările din jurnal sunt împărțite în categorii chiar și în momentul creării lor.

Lista nivelurilor de eveniment

Programatorul, când scrie un eveniment în jurnal, trebuie să decidă singur cât de importantă este această informație. Nivelul de severitate al evenimentului este ales de autorul mesajului. Există log4j5 niveluri de importanță a informațiilor înregistrate:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

Mai jos vom spune despre ele mai detaliat.

3.2 DEBUG

Nivelul DEBUGeste considerat cel mai puțin important. Informațiile care sunt scrise în jurnal cu acest nivel de importanță sunt necesare numai în timpul depanării aplicației. Pentru a înregistra informațiile necesare în timpul depanării, se folosește metoda debug().

Exemplu:

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

Atenție, metoda debugeste chiar la începutul metodei (metoda nu a avut încă timp să facă nimic) și scrie valoarea variabilei transmise metodei în jurnal. Acesta este cel mai frecvent caz de utilizare al metodei debug().

3.3 INFO și WARN

Următoarele două niveluri sunt INFOși WARN. Există două metode pentru ele - info()și warn().

Nivelul INFOeste folosit pur și simplu pentru mesaje informaționale: asta și asta se întâmplă. Când începeți să analizați o eroare din jurnal, poate fi foarte util să citiți fundalul acesteia. Metoda este perfectă pentru asta info().

Nivelul WARNeste folosit pentru a scrie avertismente (din cuvântul warning ). De obicei, cu acest nivel de importanță, se scriu informații că ceva a mers prost, dar programul știe ce să facă în această situație.

De exemplu, în procesul de scriere a unui fișier pe disc, s-a dovedit că un astfel de fișier există deja. Aici programul poate înregistra un avertisment (avertisment), dar să arate utilizatorului o casetă de dialog și să ofere să selecteze un alt nume de fișier.

Exemplu:

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 EROARE și FATAL

În cele din urmă, cele mai importante două niveluri de înregistrare sunt ERRORși FATAL. Pentru ei, există și metode speciale cu aceleași nume: error()și fatal().

De asemenea, au decis să împartă erorile în două categorii - erori obișnuite și erori fatale . O eroare fatală are ca rezultat cel mai adesea o blocare a aplicației (pentru aplicațiile desktop) sau o blocare a serviciului web (pentru aplicațiile web).

Un alt exemplu bun este sistemul de operare Windows. Dacă programul dvs. tocmai sa prăbușit, atunci din punctul de vedere al sistemului de operare, acesta este Error. Și dacă sistemul de operare în sine a căzut și vedeți ecranul albastru al morții Windows, atunci acesta este deja Fatal error.

În aplicațiile Java, evenimentele Errorsunt cel mai adesea Fatalasociate cu excepții ridicate. Exemplu:

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 Ce să înregistrezi

Desigur, nu merită să înregistrezi totul la rând. În cele mai multe cazuri, acest lucru înrăutățește drastic lizibilitatea jurnalului și, la urma urmei, jurnalul este scris în primul rând pentru a fi citit.

În plus, nu puteți scrie diverse informații personale și financiare în jurnal. Acum, cu acest lucru strict și ușor, puteți da amenzi sau procese. Mai devreme sau mai târziu, un astfel de buștean se va scurge în lateral și atunci nu vor fi probleme.

Deci, ce ar trebui să fie înregistrat?

Mai întâi, trebuie să înregistrați începutul aplicației . După ce aplicația a pornit, se recomandă să-și înregistreze modul de funcționare și diverse setări importante - acest lucru va facilita citirea jurnalului în viitor.

În al doilea rând, trebuie să înregistrați starea tuturor serviciilor terțe cu care funcționează aplicația dvs.: sisteme de corespondență, orice servicii externe. Cel puțin, trebuie să vă asigurați momentul conexiunii la ele pentru a vă asigura că funcționează corect.

În al treilea rând, toate excepțiile trebuie înregistrate . Dacă sunt așteptați, atunci informațiile despre ele pot fi scrise compact. Informațiile complete despre excepții oferă 50%-80% din informațiile importante atunci când căutați o eroare.

De asemenea, trebuie să înregistrați închiderea aplicației . Aplicația trebuie să se termine în mod normal și să nu arunce zeci de erori în jurnal. Adesea, în acest loc puteți găsi sarcini blocate, probleme cu pool-ul de fire sau probleme cu ștergerea fișierelor temporare.

Asigurați-vă că înregistrați tot ce are legătură cu securitatea și autorizarea utilizatorului . Dacă un utilizator încearcă să se autentifice sau să își reseta parola de 10 ori la rând, aceste informații ar trebui să fie reflectate în jurnalele.

Înregistrați cât mai multe informații despre sarcinile asincrone - excepțiile sunt adesea pierdute în astfel de fire. Pentru o sarcină asincronă, asigurați-vă că ați înregistrat începutul și sfârșitul. Finalizarea cu succes ar trebui să fie înregistrată în același mod ca și una problematică.

Ce altceva? Lansarea sarcinilor temporizate, lansarea sarcinilor stocate SQL-procedures, sincronizarea datelor, tot ce ține de tranzacțiile distribuite. Cred că este suficient pentru început. Veți adăuga la această listă în viitor.