Logowanie w języku Java a Log4J [zamknięte]

134

Czy nadal warto dodać bibliotekę log4j do projektu Java 5 tylko po to, aby zalogować, powiedzmy, kilka wyjątków do pliku z ładnymi ustawieniami najazdu. A może standardowe narzędzie util.logging również spełni swoje zadanie?

Co myślisz?

Okami
źródło
Zobacz stackoverflow.com/a/13144054/603516 , aby zapoznać się z licznymi problemami z blokowaniem log4j 1.2, które należy wziąć pod uwagę.
Vadzim

Odpowiedzi:

115

Powiedziałbym, że prawdopodobnie nie przeszkadza ci korzystanie z util.logging dla potrzeb, które opisujesz.

Aby uzyskać dobre drzewo decyzyjne, spójrz na Log4j vs java.util.logging

Pytanie pierwsze: Czy przewidujesz zapotrzebowanie na którykolwiek z inteligentnych programów obsługi, których Log4j nie ma, a których JUL nie ma, takich jak SMTPHandler, NTEventLogHandler lub którykolwiek z bardzo wygodnych FileHandlerów?

Pytanie drugie: Czy widzisz, że chcesz często zmieniać format danych wyjściowych logowania? Czy potrzebujesz łatwego, elastycznego sposobu, aby to zrobić? Innymi słowy, czy potrzebujesz PatternLayout Log4j?

Pytanie trzecie: Czy spodziewasz się wyraźnej potrzeby zmiany złożonych konfiguracji rejestrowania w aplikacjach po ich skompilowaniu i wdrożeniu w środowisku produkcyjnym? Czy twoja konfiguracja brzmi mniej więcej tak: „Poważne wiadomości z tej klasy są wysyłane pocztą e-mail do osoby zajmującej się pomocą techniczną; poważne wiadomości z podzbioru klas są rejestrowane do demona syslog na naszym serwerze; ostrzeżenia z innego podzbioru klas są rejestrowane do pliku na dysku sieciowym A, a następnie wszystkie wiadomości z każdego miejsca są rejestrowane w pliku na dysku sieciowym B "? I czy widzisz siebie poprawiającego to co kilka dni?

Jeśli możesz odpowiedzieć twierdząco na którekolwiek z powyższych pytań, przejdź do Log4j. Jeśli odpowiesz zdecydowanie nie na wszystkie z nich, JUL będzie więcej niż wystarczający i dogodnie jest już zawarty w SDK.

To powiedziawszy, prawie każdy projekt w dzisiejszych czasach wydaje się kończyć łącznie z log4j, choćby dlatego, że używa go inna biblioteka.

Matt Sheppard
źródło
1
Świetna odpowiedź oparta na kwestionariuszu. Do każdego własnego na podstawie potrzeb.
HopeKing
43

Polecam korzystanie z Simple Logging Facade for Java (SLF4J). Obsługuje różnych dostawców, w tym Log4J, i może być używany jako zamiennik dla Apache Commons Logging.

Brian Matthews
źródło
6
Co jest nie tak z Commons Logging?
Bart van Heukelom
5
@Bart van Heukelom i komentuj upvoters - przeczytaj artykuły.qos.ch/
Stephen C
4
@Stephen C: Dzięki za informację, chociaż dowiedziałem się o tym jakiś czas temu i teraz używam SLF4J, kiedy tylko mogę. (Mój komentarz był przy okazji prawdziwym pytaniem, a nie uwagą konserwatywną)
Bart van Heukelom
1
@Bart, Commons Logging używają dynamicznego wykrywania pakietu do użycia. SLF4J używa (lub kiedyś) wymaga, aby klasy w zapleczu w ogóle się ładowały.
Thorbjørn Ravn Andersen
21

Log4j istnieje od dawna i działa bardzo dobrze. Nie mam żadnych badań naukowych, które by to potwierdziły, ale opierając się na tym, co widziałem u dużej liczby klientów, z łatwością jest to struktura rejestrowania, która jest używana częściej niż jakakolwiek inna. Istnieje od dawna i nie został zastąpiony przez Next Big Logging Framework, który coś mówi.

Jest bardzo prosty w konfiguracji i łatwy do nauczenia się podstawowych aplikacji (wyników). Dostępnych jest cała lista aplikacji hostujących, w tym:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

Plus inne. Nie jest też trudno napisać własnego appendera. Dodatkowo każdy z programów dołączających jest bardzo elastyczny, co pozwala dokładnie kontrolować, co jest wyświetlane w dzienniku.

Jedna uwaga, miałem serię problemów z programem ładującym klasy, gdy oprócz log4j korzystałem z logowania apache commons. To było tylko dla jednej konkretnej aplikacji, ale okazało się, że łatwiej jest używać samego log4j, niż mieć elastyczność oferowaną podczas korzystania z warstwy abstrakcji, takiej jak wspólne logowanie.

Więcej informacji znajdziesz w tym artykule :

Powodzenia!

Rydell
źródło
17

java.util.logging oferuje kompleksowy pakiet rejestrowania bez nadbagażu, który zapewniają niektóre inne.

Adam
źródło
5
Plus, to jest włączone domyślnie i używany przez samego Java (więc trzeba będzie to w każdym razie!)
zrezygnował - anony-Mousse
7

log4j jest ogólnie znacznie ładniejszym pakietem i nie ma niektórych problemów, które zawiera java.util.logging. Po drugie, bezpośrednie używanie log4j jest łatwiejsze niż używanie zwykłego logowania.

Will Sargent
źródło
3
Czy mógłbyś podać bardziej szczegółowe informacje na temat czkawek, które ma java.util.logging?
alkber
Jasne, podobnie jak narzut związany z rejestrowaniem zsynchronizowanych metod: patrz github.com/playframework/playframework/issues/6958 i bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent
4

Zalecam używanie Apache Commmons Logging jako interfejsu logowania. W ten sposób możesz przełączać implementacje rejestrowania w dowolnym momencie, bez konieczności wprowadzania jakichkolwiek zmian w kodzie.

Edmund Tay
źródło
3

Poszedłbym z log4j. Możliwości z log4j wcale nie są przestarzałe!

svrist
źródło