2008-08-28 21 views
119

Ist es immer noch wert, die log4j Bibliothek zu einem Java 5 Projekt hinzuzufügen, nur um zu loggen sagen wir einige Ausnahmen zu einer Datei mit einigen schönen Rollover-Einstellungen. Oder wird die Standard-util.logging-Einrichtung auch die Arbeit machen?Java Logging vs Log4J

Was denkst du?

+0

http://stackoverflow.com/a/13144054/603516 Siehe Ausgaben zahlreiche log4j 1.2 Verriegelung zu sein berücksichtigt. – Vadzim

Antwort

103

Ich würde sagen, Sie sind wahrscheinlich in Ordnung mit util.logging für die Bedürfnisse, die Sie beschreiben.

Für einen guten Entscheidungsbaum, haben einen Blick auf Log4j vs java.util.logging

Frage eins: Haben Sie eine Notwendigkeit für eine der klugen Handler antizipieren, die Log4j hat, dass jul, nicht, wie die SMTPHandler hat NTEventLogHandler oder einer der sehr praktischen FileHandler?

Frage zwei: Möchten Sie häufig das Format Ihrer Protokollausgabe wechseln? Brauchen Sie einen einfachen, flexiblen Weg? Mit anderen Worten, benötigen Sie Log4j PatternLayout?

Frage drei: Erwarten Sie eine definitive Notwendigkeit, komplexe Protokollierungskonfigurationen in Ihren Anwendungen zu ändern, nachdem sie in einer Produktionsumgebung kompiliert und bereitgestellt wurden? Klingt Ihre Konfiguration etwa wie folgt: "Schwerwiegende Nachrichten dieser Klasse werden per E-Mail an den Support-Mitarbeiter gesendet. Schwere Nachrichten von einer Teilmenge von Klassen werden auf einem syslog-Deamon auf unserem Server protokolliert. Warnmeldungen von anderen Klassen werden protokolliert in eine Datei auf Netzlaufwerk A, und dann werden alle Nachrichten von überall in einer Datei auf Netzlaufwerk B protokolliert? Und siehst du, dass du es alle paar Tage tüftelst?

Wenn Sie eine der obigen Fragen mit Ja beantworten können, gehen Sie mit Log4j. Wenn Sie ein definitives Nein zu allen beantworten, wird JUL mehr als ausreichend sein und es ist praktisch bereits im SDK enthalten.

das gesagt ist, so ziemlich jedes Projekt in diesen Tagen mit log4j aufzuwickeln scheint, wenn auch nur, weil einige andere Bibliothek nutzt.

+1

Große Fragebogen basierte Antwort. Jedem sein eigenes Bedürfnis. – HopeKing

3

Ich würde mit log4j gehen. Die Möglichkeiten mit log4j sind nicht überholt!

4

Ich empfehle die Verwendung Apache Commmons Logging als Ihre Protokollierungsschnittstelle. Auf diese Weise haben Sie die Flexibilität, Logging-Implementierungen jederzeit und ohne Codeänderungen an Ihrem Ziel zu wechseln.

39

Ich empfehle, dass Sie die Simple Logging Facade for Java (SLF4J) verwenden. Es unterstützt verschiedene Anbieter, die Log4J enthalten und kann als Ersatz für Apache Commons Logging verwendet werden.

+5

Was ist los mit Commons Logging? –

+5

@Bart van Heukelom und kommentieren Upwoters - lesen Sie http://articles.qos.ch/thinkAgain.html –

+4

@Stephen C: Danke für die Info, obwohl ich das vor einiger Zeit gelernt habe und verwende jetzt SLF4J wann immer ich kann. (Mein Kommentar war eine echte Frage btw, keine konservative Bemerkung) –

17

Log4j gibt es schon lange, und es funktioniert sehr gut. Ich habe keine wissenschaftliche Studie, um sie zu unterstützen, aber basierend auf dem, was ich bei einer großen Anzahl von Kunden gesehen habe, ist es einfach das Logging-Framework, das ich mehr als jedes andere verwendet sehe. Es ist schon lange her und wurde nicht durch das Next Big Logging Framework ersetzt, das etwas aussagt.

Es ist tod einfach einzurichten und einfach zu lernen die grundlegenden Appender (Ausgänge).Es gibt eine ganze Reihe Appen, die verfügbar sind, einschließlich:

  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 andere. Es ist auch nicht schwer, einen eigenen Appender zu schreiben. Darüber hinaus gibt es in jedem der Appender eine große Flexibilität, mit der Sie gezielt steuern können, was in Ihrem Protokoll ausgegeben wird.

Ein Hinweis, ich hatte eine Reihe von Classloader-Probleme, wenn ich Apache Commons Logging zusätzlich zu Log4j verwendet. Es war nur für eine bestimmte Anwendung, aber ich fand es einfacher, Log4j allein zu verwenden, anstatt die Flexibilität zu haben, die bei der Verwendung einer Abstraktionsschicht wie Commons-Logging geboten wird.

Lesen Sie diesen Artikel für more details:

Viel Glück!

7

log4j ist insgesamt ein viel schöneres Paket und hat nicht einige der Schluckauf, die java.util.logging enthält. Ich würde zweitens sagen, dass die Verwendung von log4j direkt einfacher ist als die Commons-Protokollierung.

+2

Können Sie bitte genauer auf die Schluckauf, dass java.util.logging hat? – alkber

+0

Sicher, wie der Aufwand bei der Protokollierung synchronisierter Methoden: siehe https://github.com/playframework/playframework/issues/6958 und https://bugs.openjdk.java.net/browse/JDK-8077846 –

14

java.util.logging bietet eine umfassende Protokollierung Paket ohne Übergepäck einige der anderen zur Verfügung stellen ..

+2

Plus, ist es ** standardmäßig enthalten ** und ** verwendet von Java selbst ** (damit Sie es trotzdem haben!) –