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
Matt Sheppard
Ich würde sagen, Sie sind wahrscheinlich mit util.logging für die von Ihnen beschriebenen Anforderungen einverstanden.
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.
@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:
ConsoleAppender
DailyRollingFileAppender
ExternallyRolledFileAppender
FileAppender
JDBCAppender
JMSAppender
NTEventLogAppender
RollingFileAppender
SMTPAppender
SocketAppender
SyslogAppender
TelnetAppender
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.
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.
Können Sie bitte genauer auf die Schluckaufe eingehen, die java.util.logging hat?
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.
Können Sie bitte genauer auf die Schluckaufe eingehen, die java.util.logging hat?
Unter stackoverflow.com/a/13144054/603516 finden Sie zahlreiche zu berücksichtigende log4j 1.2-Sperrprobleme.
– Wadzim
30. Oktober 2012 um 17:13 Uhr