Java:
Rejestrowanie zdarzeń

Jak to zrobić:

Oto prosty sposób na rozpoczęcie logowania w Javie przy użyciu wbudowanego pakietu java.util.logging.

import java.util.logging.Logger;
import java.util.logging.Level;

public class AppLogging {
    private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

    public static void main(String[] args) {
        LOGGER.info("Logowanie komunikatu na poziomie INFO");

        try {
            int division = 10 / 0;
        } catch (ArithmeticException e) {
            LOGGER.log(Level.SEVERE, "Wystąpił wyjątek", e);
        }
    }
}

To wygeneruje wynik w stylu:

Jul 03, 2023 2:00:00 PM AppLogging main
INFO: Logowanie komunikatu na poziomie INFO
Jul 03, 2023 2:00:00 PM AppLogging main
SEVERE: Wystąpił wyjątek
java.lang.ArithmeticException: / przez zero
    at AppLogging.main(AppLogging.java:10)

Dogłębna analiza

Logowanie w Javie rozwinęło się dość znacznie. Historycznie, logowanie było bardziej ad-hoc z wykorzystaniem wyjść systemowych i własnoręcznie pisanych mechanizmów. Jednak potrzeba standaryzacji doprowadziła do powstania API do logowania, takich jak Log4j i SLF4J. Pakiet java.util.logging został wprowadzony w JDK 1.4, dostarczając ustandaryzowany sposób na rejestrowanie komunikatów.

Alternatywy dla java.util.logging (JUL) obejmują Log4j 2 i SLF4J. Chociaż JUL jest wbudowany w Javę i nie wymaga dodatkowych zależności, oba Log4j 2 i SLF4J oferują bardziej zaawansowane funkcje, takie jak bardziej szczegółowa kontrola konfiguracji logowania, asynchroniczne logowanie oraz lepsza wydajność.

Pod względem implementacji, logowanie może być synchroniczne, gdzie każdy komunikat logu jest przetwarzany w wątku, który go wygenerował, lub asynchroniczne, gdzie komunikaty są przekazywane do osobnego wątku. Asynchroniczne logowanie może poprawić wydajność, ale wprowadza złożoność, ponieważ należy radzić sobie ze współbieżnością i upewnić się, że komunikaty logów nie zostaną utracone przy awarii aplikacji.

Zobacz także