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ż WARNzostaną 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 DEBUGbędą INFOignorowane.
- 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