Was ist der Unterschied zwischen Java Logger und System.out.println?

8

Ich habe die API über die Logger-Klasse ( hier ) und ich habe mir die Methode Logger.info angeschaut. Ich war verwirrt, als ich seinen Umfang als eine Nachricht sah, die als eine Zeichenkette public void info(String msg) angezeigt wurde, die die gleiche wie System.out.println() ist. Ich frage mich, was ist der Unterschied zwischen diesen beiden, und warum verwenden wir Logger anstelle von System.out.println , wenn sie das gleiche Ding ausdrucken können.

Im Logger.

Logger.info("Hello")

Ausgabe:

%Vor%

In System.out.println

'System.out.println ("Hallo")

Ausgabe:   Hallo

    
RedRocket 07.08.2015, 03:49
quelle

4 Antworten

9

Normalerweise, weil Logger so konfiguriert werden kann, dass sie in eine Datei (und die Konsole) schreibt. Es könnte auch mit einer höheren (oder niedrigeren) Granularität als Messaging konfiguriert werden. Zum Beispiel könnten Sie (zur Laufzeit) für die Ebene von warn konfigurieren. In diesem Fall würde dieser Looger keine debug oder info Nachrichten anzeigen. Es kann Informationen wie die Klasse, die schreibt, eine Zeilennummer und ein Datum und eine Uhrzeit (der Nachricht) enthalten.

    
Elliott Frisch 07.08.2015, 03:52
quelle
5

Mit einem Logger können Sie viele Details abstrahieren und viel mehr tun, als Sie in stdout schreiben könnten.

  • Sie können verschiedene Ziele angeben, an die geschrieben werden soll. Verschiedene Appender schreiben in eine Datei, rollen die Datei für bestimmte Zeiträume, schreiben in eine Warteschlange oder Datenbank usw.

  • Sie können ein konsistentes Format für Protokollnachrichten angeben, anstatt es jeder Zeile hinzufügen zu müssen, die Sie in stdout schreiben.

  • Sie können einen Appender auswählen, der die Ausgabe zwischenspeichert, sodass mehrere Threads protokollieren können, ohne dass die Threads um die Sperre für das Konsolenobjekt konkurrieren.

  • Mit der Filterung nach Kategorie (normalerweise Paket und Klassenname) und Protokollierungsstufe (Trace, Debug, Info, Fehler, fatal) können Sie eine Menge tun, um zu konfigurieren, welche Protokollmeldungen angezeigt werden sollen was du ignorieren willst. Mit der Protokollierung können Sie die Konfiguration in den Logger-Eigenschaften ändern oder eine Seite in Ihre Anwendung einfügen, um zu ändern, was während der Übertragung gefiltert wird.

  • Sie können diese Inhalte mischen und abgleichen, indem Sie zum Beispiel einen spezifischen SMTP-Appender einrichten, um Log-Nachrichten für die Protokollierungsstufe des Fehlers oder höher per E-Mail zu versenden, zusätzlich zum Schreiben der Nachrichten in eine laufende Datei oder was auch immer.

Nathan Hughes 07.08.2015 04:09
quelle
2

Der Hauptunterschied zwischen einem Logger und System.out.println ist
Logger: Gibt den Text in einer Datei (Textdatei) aus
System.out.println: Gibt die Ausgabe in der Konsole aus

Logger ist nützlich, wenn Sie für irgendwelche LIVE-Projekte gehen.
Wenn ein Projekt entwickelt und bereitgestellt wird, können Sie die Konsole nicht überprüfen. Zu diesem Zeitpunkt ist Logger nützlich, um den Fluss Ihres Projekts zu verfolgen. Außerdem können Sie den Fehler oder die Exception finden, wenn Sie dem Logger den Fangblock {...} zugewiesen haben.

Gehen Sie auch durch Logger vs. System.out.println

    
programmer 07.08.2015 04:36
quelle
1
  • Aber wenn wir irgendeinen Protokollierungsmechanismus verwenden (log4j, slf4j, logback etc), dann wir Konfigurieren Sie Appender und entsprechende Zielprotokolldateien für jede Paket. Standardmäßig ist der Konsolenappender ausgeschaltet, außer Sie konfigurieren Sie es explizit für die Anmeldung an einem Ziel.
  • System.out.println protokolliert die Nachricht immer an einem Konsolenappender. Also, es sollte nur verwendet werden, wenn wir sicher sind, dass der Konsolenappender ist in der Logger-Konfigurationsdatei konfiguriert. Sonst landen wir Logs auf der Server-Konsole angemeldet, die falsch ist. Irgendein Protokoll von Innerhalb der Anwendung sollte zum entsprechenden Anwendungsprotokoll gehen und nicht das Serverprotokoll.

Lassen Sie mich das mit einem Beispiel erklären.

  • Wenn wir eine Anwendung namens Tracker mit einem Protokollierungsmechanismus zur Ausführung in einem Tomcat-Container erstellen, haben wir Appender für die Anwendungsprotokollierung mit der Zielprotokolldatei tracker-application.log konfiguriert und den Konsolenappender nicht konfiguriert.
  • Wenn dann die System.out.println von der JVM gefunden wird, wird das Protokoll zum Serverprotokoll des Tomcat-Servers weitergeleitet, was falsch ist, weil das Serverprotokoll nur Informationen über den Server und nicht über die Anwendung haben sollte.

Wenn wir jedoch einen Konsolenappender mit einer Zielprotokolldatei erstellt haben, wird er ordnungsgemäß protokolliert.

Hoffe ich war klar. ;)

Best Practices finden Sie unter Verwenden Sie das System nicht. out.println im Server-Side-Code oder Ссылка

Für Unterschiede zwischen beiden bitte beachten Sie Logger vs. System.out.println

    
Vero J 31.08.2016 09:24
quelle

Tags und Links