W tym samouczku za pomocą przykładów nauczymy się o protokołowaniu Java i jego różnych składnikach.
Java umożliwia nam tworzenie i przechwytywanie komunikatów i plików dziennika w trakcie procesu logowania.
W Javie logowanie wymaga ram i interfejsów API. Java ma wbudowaną strukturę rejestrowania w java.util.logging
pakiecie.
Do celów logowania możemy również korzystać z platform innych firm, takich jak Log4j, Logback i wiele innych.
Składniki dziennika Java
Poniższy rysunek przedstawia podstawowe komponenty i przepływ kontroli interfejsu API Java Logging ( java.util.logging
).

1. Logger
Logger
Klasa udostępnia metody logowania. Możemy tworzyć instancje obiektów z Logger
klasy i wywoływać jej metody do celów logowania.
Weźmy przykład.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Metoda z Logger
klasy służy do znalezienia lub utworzyć nową Logger
. Argument łańcuchowy określa nazwę programu rejestrującego.
Tutaj tworzy to nowy Logger
obiekt lub zwraca istniejący Logger
o tej samej nazwie.
Konwencją jest definiowanie a Logger
po bieżącej klasie przy użyciu class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Uwaga: ta metoda spowoduje zgłoszenie, NullPointerException
jeśli przekazana nazwa to null
.
Każdy Logger
ma poziom, który określa ważność komunikatu dziennika. Istnieje 7 podstawowych poziomów dziennika:
Poziom dziennika (malejąco) | Posługiwać się |
---|---|
CIĘŻKI: SILNY | poważna awaria |
OSTRZEŻENIE | komunikat ostrzegawczy, potencjalny problem |
INFO | ogólne informacje o czasie wykonywania |
KONFIG | informacje o konfiguracji |
W PORZĄDKU | ogólne informacje dla deweloperów (komunikaty śledzenia) |
FINERY | szczegółowe informacje dla deweloperów (komunikaty śledzenia) |
NAJLEPSZA | bardzo szczegółowe informacje dla deweloperów (komunikaty śledzenia) |
POZA | wyłącz logowanie na wszystkich poziomach (nic nie rejestruj) |
WSZYSTKO | włącz logowanie na wszystkich poziomach (przechwytuj wszystko) |
Każdy poziom rejestrowania ma wartość całkowitą, która określa jego wagę, z wyjątkiem dwóch specjalnych poziomów rejestrowania OFF
i ALL
.
Rejestrowanie wiadomości
Domyślnie zawsze rejestrowane są trzy najwyższe poziomy dziennika. Aby ustawić inny poziom, możemy użyć następującego kodu:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
W tym przykładzie FINE
rejestrowane są tylko poziomy i poziomy powyżej niego. Wszystkie inne komunikaty dziennika są usuwane.
Teraz, aby zarejestrować wiadomość, używamy log()
metody.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Istnieją skrócone metody rejestrowania na pożądanych poziomach.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Wszystkie żądania dziennika, które przeszły ustawiony poziom dziennika, są następnie przekazywane do LogRecord .
Uwaga: Jeśli poziom programu rejestrującego jest ustawiony na null
, jego poziom jest dziedziczony po jego rodzicu i tak dalej w górę drzewa.
2. Filtry
Filtr (jeśli jest obecny) określa, czy LogRecord powinien być przekazywany, czy nie. Jak sama nazwa wskazuje, filtruje komunikaty dziennika według określonych kryteriów.
LogRecord przepuszcza tylko z rejestratorem do obsługi dziennika oraz obsługi dziennika do systemów zewnętrznych, jeśli przechodzi określone kryteria.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Programy obsługujące (dołączające)
Program obsługi dziennika lub programy dołączające otrzymują LogRecord i eksportują go do różnych celów.
Java SE udostępnia 5 wbudowanych programów obsługi:
Handlery | Posługiwać się |
---|---|
StreamHandler | pisze do OutputStream |
ConsoleHandler | pisze do konsoli |
FileHandler | zapisuje do pliku |
SocketHandler | zapisuje do zdalnych portów TCP |
MemoryHandler | pisze do pamięci |
Procedura obsługi może przekazać LogRecord do filtra, aby ponownie określić, czy można go przekazać do systemów zewnętrznych, czy nie.
Aby dodać nową procedurę obsługi, używamy następującego kodu:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Aby usunąć moduł obsługi, używamy następującego kodu:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Rejestrator może mieć wiele programów obsługi. Aby uzyskać wszystkie programy obsługi, używamy następującego kodu:
Handler() handlers = logger.getHandlers();
4. Formaty
Procedura obsługi można również użyć Formatter sformatować LogRecord obiektu na ciąg znaków przed eksportując go do systemów zewnętrznych.
Java SE ma dwa wbudowane elementy formatujące :
Formatters | Posługiwać się |
---|---|
SimpleFormatter | formatuje LogRecord na ciąg |
XMLFormatter | formatuje LogRecord do postaci XML |
Możemy użyć następującego kodu do sformatowania modułu obsługi:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
Obiekt LogManager śledzi globalne informacje rejestrowania. Odczytuje i utrzymuje konfigurację rejestrowania i wystąpienia programu rejestrującego.
Menedżer dziennika jest singletonem, co oznacza, że tworzona jest tylko jedna jego instancja.
Aby uzyskać instancję menedżera dziennika, używamy następującego kodu:
LogManager manager = new LogManager();
Zalety logowania
Oto kilka zalet logowania w Javie.
- pomaga w monitorowaniu przebiegu programu
- pomaga w wychwytywaniu wszelkich błędów, które mogą wystąpić
- zapewnia obsługę diagnostyki problemów i debugowania