1.1 Въведение в дневниците

Дневникът е списък на събитията, които са се случor. Почти като морски дневник or дневник. Е, съответно логерът е обект, с който можете да влезете. В програмирането е обичайно да се регистрира почти всичко. И в Java всичко е така и дори малко повече.

регистратор java

Факт е, че Java програмите много често са големи сървърни applications без UI, конзола и т.н. Те обработват заявки от хиляди потребители едновременно и често възникват различни грешки. Особено когато различни нишки започнат да си пречат.

И всъщност единственият начин да намерите рядко възпроизвеждани грешки и повреди в такава ситуация е да запишете в журнала / file всичко , което се случва във всяка нишка.

Най-често в дневника се записва информация за параметрите на метода, с който е извикан, всички прихванати грешки и много междинна информация. Колкото по-пълен е дневникът, толкова по-лесно е да се възстанови последователността от събития и да се проследят причините за повреда or грешка.

Но колкото по-голям е трупът, толкова по-трудно е да се работи с него. Понякога регистрационните файлове достигат няколко гигаbyteа на ден. Това е добре.

1.2 Неуспешни регистрационни файлове

Като първи регистрационни файлове разработчиците използваха просто извеждане към конзолата . Удобно е да направите това по време на отстраняване на грешки в приложението - когато цялата важна информация и променливи стойности се записват в конзолата. Но такъв дневник е напълно неприложим при нормална работа на приложението.

Първо, приложението може да иска да изведе нещо на самата конзола и потребителят изобщо не иска да вижда служебната информация, предназначена за програмиста.

Второ, размерът на буфера на конзолата е ограничен, не можете да пишете много там.

И накрая, трето, информацията за програмни грешки, която се събира за дълъг период от време, трябва да бъде изпратена на разработчиците на програмата. И най-удобно е да запишете цялата тази информация наведнъж във файл.

Разработчиците бързо решиха първия проблем - те излязоха с друг изходен поток - System.err. Можете да пишете съобщения в него и те ще бъдат изпратени в отделна тема, а не в стандартната конзола.

И дори проблемът с писането във файл беше решен:

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

Но дори и в тази форма, това не реши целия проблем, така че беше решено да се създаде специална библиотека, която да записва лог съобщения във файл. Тя го направи по интелигентен начин и позволи гъвкавостта за конфигуриране на филтри за регистрирани събития и данни.

Целият процес на регистриране всъщност се състои от три части:

  • Първата част е събиране на информация .
  • Втората част е филтрирането на събраната информация.
  • Третата част е запис на избраната информация.

1.3 Въведение в log4j регистратора

Първият популярен логер в общността на Java беше log4j. Включването му в проекта е много просто, за това трябва да добавите само няколко реда към вашия pom.xml


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

Взаимодействието на вашата програма с такъв регистратор би изглеждало по следния начин:

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

Тук се случват три неща:

Създаването на обекта е маркирано в зелено Logger . Неговият обект се съхранява в статична променлива за удобна по-нататъшна работа с него. И също така getLogger()информация за класа, в който се събира информацията, се предава на метода.

Линията, маркирана в синьо, е мястото, където регистрираме ценна информация само по време на отстраняване на грешки . За това се използва специален метод -debug()

И накрая, редът, където записваме изключението, което е възникнало в журнала, е маркиран в червено . Изключенията са потенциални грешки, така че error().