Verwenden Sie System.out.println nicht im serverseitigen Code
Ich gehört, dass die Verwendung System.out.println
für logging-Zwecke ist eine sehr schlechte Praxis, und dies möglicherweise zwingen, die server fehlschlagen.
Ich glaube nicht, verwenden Sie diesen Ansatz, aber ich bin sehr daran interessiert zu wissen, warum-System.aus.println könnte so trash-Sachen, wenn verwendet im backend-code.
InformationsquelleAutor der Frage Oleksandr | 2011-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
System.aus.println ist eine IO-operation und daher zeitaufwändig ist.
Das Problem bei der Verwendung es in deinem code ist, dass das Programm warten, bis die println beendet hat. Dies kann nicht ein problem sein, bei kleinen Webseiten, aber sobald Sie zu laden oder viele Iterationen, du wirst den Schmerz fühlen.
Der bessere Ansatz ist die Verwendung eines logging-framework.
Verwenden Sie eine message-queue und nur schreiben, wenn kein anderer Ausgang geht auf.
Und ein weiterer Vorteil ist, dass können Sie konfigurieren, separate log-Dateien für verschiedene Zwecke.
Etwas, das Ihr Ops-team wird dich lieben.
Lesen Sie hier mehr:
InformationsquelleAutor der Antwort Lars
Es ist eine schlechte Praxis, denn wenn Sie Ihre Anwendung in der Produktion, Sie können nicht separate Anwendung, die logs von server-logs.
Prod teams wollen, dass Sie getrennt von Protokollen, die von Ihrer Anwendung aus dem app-server (tomcat, websphere, etc...) : Sie wollen in der Lage sein monitor die app-server diffrently machen von der Anwendung selbst.
Darüber hinaus mit dem System.aus, können Sie nicht definieren, das log-level : in der Produktion, die Sie nicht drucken möchten, die debug-Informationen.
InformationsquelleAutor der Antwort Jean-Philippe Briend
Check-out Adam Biens Artikel in der Java Magazin Ausgabe November/Dezember über stress-Tests JEE6-Anwendungen - es ist kostenlos onlinemüssen Sie nur abonnieren.
Auf Seite 43 zeigt er, dass ein server-Anwendungen, die verwaltet, um zu behandeln 1700 Transaktionen pro Sekunde fällt, nur 800 beim einfügen eines einzigen
System.out.println
mit dem fix-String in jedem.InformationsquelleAutor der Antwort Alexander Rühl
Ist es als schlecht, weil
System.out.println();
frisst mehr cpu-und so-Ausgabe kommt langsam bedeutet schmerzt die Leistung. (Eigentlich jeder I/O-Betrieb frisst cpu).InformationsquelleAutor der Antwort Harry Joy
Der Grund ist nicht, dass der server möglicherweise fehl, aber es könnte schwer sein Sie zu finden, wie die Ausgabe auf dem server. Sollten Sie immer irgendeine Art von logging-framework mit einem definierten Verhalten und die Ausgabe-Datei.
InformationsquelleAutor der Antwort tobiasbayer
Zum einen, dass mehrere Anfragen auf Ihre server und drucken Sie das Protokoll auf
System.out
ist nicht gute Praxis.System.out
ist nicht synchronisiert. Es muss eine Parallelität verwalten drucken überSystem.out
System.out
. Sie können nicht trennen Sie Ihre log-Level auf separate Ausgänge auf die Fliegen.Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Buhake Sindi
Logger verwenden die message-queue und nur schreiben, wenn kein anderer Ausgang geht auf.
Logger sind thread-sicher (ich.e synchron)
a.
Formatierung, die Begrenzung der log-Inhalte erreichbar von Holzfällernb.
Mehrere Ziel-logging –Datei, Konsole, DB -Wir müssen Anwendungsprotokolle getrennt vom Server-Protokolle, wie es kann dazu führen, die Server-Ausfall
InformationsquelleAutor der Antwort Yatish Balaji
Ein weiterer Grund ist, dass System.out und err sind PrintStreams, die verbrauchen alle zugrunde liegenden IOExceptions. Sehen Sie diese Methoden von PrintStreams:
Also eine IOException aus, die aus der zugrunde liegenden Strom wird IMMER verbraucht, und in der Regel die Menschen rufen niemals checkError auf dem System aus, so dass Sie nicht einmal wissen, dass etwas passiert ist.
InformationsquelleAutor der Antwort Gábor Lipták
Verwendung von standard-out ist eine schlechte Praxis. Allerdings, wenn Sie eine Bibliothek haben, oder code, der verwendet wird.out und System.err, Sie können schreiben Sie Ihre eigenen PrintStream, die Protokolle der thread-name und info() und error() den text statt. Sobald Sie dies getan haben, können Sie entspannter sein, über die Verwendung von System.als es in die Protokolle zu schreiben, z.B. log4j.
Idealerweise verwenden Sie die richtigen logs direkt ein esp für debug-Protokollierung. IMHO seiner nicht Sache, dass viel, vorausgesetzt, Sie don verwenden Sie die integrierte System.out/err! (Eine große übernahme zugegebenermaßen)
Ob Ihr System.das ist weitergeleitet, um eine Datei oder verwenden log4j oder Java-Logger in eine Datei schreiben, die Leistung ist auch fast genau das gleiche.
InformationsquelleAutor der Antwort Peter Lawrey