4.1 Lista poziomów logowania
Napisałeś swój program, wgrałeś go na serwer i od razu pojawiają się pytania:
- Jak upewnić się, że
debug()
metoda nie działa podczas pracy wproduction
? - W dziennikach jest za dużo informacji, czy chcesz zostawić tylko komunikaty o błędach?
- Jak wyświetlić szczegółowy log dla jednej części aplikacji?
Oczywiście twórcy dzienników stanęli przed tym samym problemem kilkadziesiąt lat temu. Nie powiem ci, jak ten problem został rozwiązany w języku C, ale w języku Java został rozwiązany bardzo pięknie.
Dziennik filtruje dane przed zapisaniem informacji w pliku . Możesz bardzo szybko zmniejszyć / zwiększyć szczegółowość dziennika, ustawiając poziom logowania. Poziomy te opisano w poniższej tabeli:
Poziom | Notatka | |
---|---|---|
1 | WSZYSTKO | Rejestruj wszystkie wiadomości |
2 | NAMIERZAĆ | Mała wiadomość podczas debugowania |
3 | ODPLUSKWIĆ | Komunikaty ważne dla debugowania |
4 | INFORMACJE | Proste wiadomości |
5 | OSTRZEGAĆ | Pisz tylko fatalny, błąd i ostrzeżenie |
6 | BŁĄD | Zapisuj tylko błędy i błędy krytyczne |
7 | FATALNY | Pisz tylko błędy krytyczne |
8 | WYŁĄCZONY | Nie zapisuj wiadomości do dziennika |
Te poziomy są używane podczas filtrowania wiadomości. Jeśli ustawisz poziom rejestrowania na WARN
, to wszystkie wiadomości mniej ważne niż WARN
zostaną odrzucone: TRACE
, DEBUG
, INFO
. Jeśli ustawisz poziom filtrowania na FATAL
, to nawet ERROR
.
Istnieją jeszcze dwa poziomy istotności używane podczas filtrowania — ten OFF
(odrzuca wszystkie wiadomości) i ALL
— zapisuje wszystkie wiadomości (nic nie odrzuca).
4.2 Przykład konfiguracji dziennika
Spójrzmy na prosty przykład konfiguracji dziennika. W tym celu potrzebujemy pliku log4j.properties, który można umieścić w folderze zasobów. Dodajmy do niego następującą treść:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Tutaj w pierwszej linii ustawiamy poziom logowania - WARN
. A to oznacza, że komunikaty zapisywane do rejestratora ze statusem DEBUG
będą INFO
ignorowane.
- Określ jakiego typu appender będziemy używać -
ConsoleAppender
- Określ, gdzie będziemy zapisywać dziennik -
System.out
- Ustawiamy klasę, która będzie kontrolować format nagrywania -
PatternLayout
- Ustaw format nagrywania dla wszystkich wiadomości - datę i godzinę
4.3 Popularne błędy w logowaniu
I jeszcze jeden ważny punkt - popularne błędy w logowaniu. Nie ma tak wielu opcji, aby coś zrobić, ale można zidentyfikować kilka typowych błędów:
- Za dużo logowania . Nie należy rejestrować każdego kroku, który teoretycznie może mieć znaczenie. Jest zasada: logi mogą obciążyć wydajność nie więcej niż o 10% . W przeciwnym razie wystąpią problemy z wydajnością.
- Logowanie wszystkich danych do jednego pliku . Spowoduje to, że w pewnym momencie odczyt/zapis będzie bardzo trudny, nie wspominając o tym, że w niektórych systemach istnieją ograniczenia rozmiaru plików.
- Używanie niewłaściwych poziomów rejestrowania . Każdy poziom rejestrowania ma wyraźne granice i należy ich przestrzegać. Jeśli granica jest niejasna, możesz uzgodnić, którego poziomu użyć.
GO TO FULL VERSION