Java-Protokollierung vs. Log4J [closed]

Lesezeit: 5 Minuten

Benutzer-Avatar
Okami

Lohnt es sich immer noch, die log4j-Bibliothek zu einem Java 5-Projekt hinzuzufügen, nur um beispielsweise einige Ausnahmen in einer Datei mit einigen netten Rollover-Einstellungen zu protokollieren? Oder wird die standardmäßige util.logging-Funktion die Aufgabe auch erledigen?

Was denkst du?

  • Unter stackoverflow.com/a/13144054/603516 finden Sie zahlreiche zu berücksichtigende log4j 1.2-Sperrprobleme.

    – Wadzim

    30. Oktober 2012 um 17:13 Uhr

Benutzer-Avatar
Matt Sheppard

Ich würde sagen, Sie sind wahrscheinlich mit util.logging für die von Ihnen beschriebenen Anforderungen einverstanden.

Einen guten Entscheidungsbaum finden Sie unter Log4j vs. java.util.logging

Frage eins: Erwarten Sie einen Bedarf für einen der cleveren Handler, die Log4j hat, die JUL nicht hat, wie den SMTPHandler, NTEventLogHandler oder einen der sehr praktischen FileHandler?

Frage 2: Wollen Sie häufig das Format Ihrer Logging-Ausgabe wechseln? Benötigen Sie dafür eine einfache und flexible Möglichkeit? Mit anderen Worten, brauchen Sie das PatternLayout von Log4j?

Frage drei: Erwarten Sie einen definitiven Bedarf an der Möglichkeit, komplexe Protokollierungskonfigurationen in Ihren Anwendungen zu ändern, nachdem sie kompiliert und in einer Produktionsumgebung bereitgestellt wurden? Klingt Ihre Konfiguration etwa so: „Schwerwiegende Meldungen von dieser Klasse werden per E-Mail an den Support-Mitarbeiter gesendet; schwerwiegende Meldungen von einer Teilmenge von Klassen werden in einem Syslog-Daemon auf unserem Server protokolliert; Warnmeldungen von einer anderen Teilmenge von Klassen werden protokolliert in eine Datei auf Netzlaufwerk A; und dann werden alle Nachrichten von überall in eine Datei auf Netzlaufwerk B protokolliert”? Und sehen Sie sich, wie Sie es alle paar Tage optimieren?

Wenn Sie eine der obigen Fragen mit Ja beantworten können, entscheiden Sie sich für Log4j. Wenn Sie alle mit einem klaren Nein beantworten, ist JUL mehr als ausreichend und praktischerweise bereits im SDK enthalten.

Allerdings scheint heutzutage so ziemlich jedes Projekt mit log4j zu enden, und sei es nur, weil eine andere Bibliothek es verwendet.

  • Tolle fragebogenbasierte Antwort. Jedem das Seine je nach Bedarf.

    – HopeKing

    10. März 2017 um 5:36 Uhr

  • Log4j vs java.util.logging Link funktioniert nicht mehr

    – Prachi

    4. August 2020 um 22:44 Uhr

  • Prost – Habe es gegen eine Wayback-Maschine ausgetauscht.

    – Matt Sheppard

    6. August 2020 um 6:34 Uhr

Ich empfehle Ihnen, die zu verwenden Einfache Protokollierungsfassade für Java (SLF4J). Es unterstützt verschiedene Anbieter, die Log4J enthalten, und kann als Ersatz für Apache Commons Logging verwendet werden.

  • Was ist falsch an Commons Logging?

    – Bart van Heukelom

    21. Dezember 2010 um 10:38 Uhr

  • @Bart van Heukelom und Kommentar-Upvoter – lesen artikel.qos.ch/thinkAgain.html

    – Stefan C

    19. Juni 2011 um 7:43 Uhr


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

    – Bart van Heukelom

    19. Juni 2011 um 11:39 Uhr

  • @Bart, Commons Logging verwendet die dynamische Erkennung des zu verwendenden Pakets. SLF4J verwenden (oder früher) benötigen die Klassen im Backend, um überhaupt geladen zu werden.

    – Thorbjørn Ravn Andersen

    3. Juli 2011 um 16:59 Uhr

Log4j gibt es schon lange und es funktioniert sehr gut. Ich habe keine wissenschaftliche Studie, die dies untermauert, aber basierend auf dem, was ich bei einer großen Anzahl von Clients gesehen habe, ist es leicht das Protokollierungs-Framework, das meiner Meinung nach mehr als jedes andere verwendet wird. Es gibt es schon lange und wurde nicht durch das Next Big Logging Framework ersetzt, was etwas aussagt.

Es ist kinderleicht einzurichten und die grundlegenden Appender (Ausgaben) leicht zu erlernen. Es gibt eine ganze Reihe von Host-Appendern, 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 schwierig, einen eigenen Appender zu schreiben. Darüber hinaus gibt es in jedem der Appender eine große Flexibilität, mit der Sie speziell steuern können, was in Ihrem Protokoll ausgegeben wird.

Eine Anmerkung: Ich hatte eine Reihe von Classloader-Problemen, als ich zusätzlich zu log4j die Apache-Commons-Protokollierung verwendete. 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.

Siehe diesen Artikel für
mehr Details:

Viel Glück!

java.util.logging bietet ein umfassendes Logging-Paket ohne das Übergepäck einiger anderer.

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

Ich empfehle die Verwendung Apache Commons-Protokollierung als Ihre Logging-Schnittstelle. Auf diese Weise haben Sie die Flexibilität, die Protokollierungsimplementierungen jederzeit zu wechseln, ohne dass Codeänderungen auf Ihrer Seite erforderlich sind.

Benutzer-Avatar
svrist

Ich würde mit log4j gehen. Die Möglichkeiten mit log4j sind keineswegs obsolet!

1340930cookie-checkJava-Protokollierung vs. Log4J [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy