Logger vs. System.out.println
Bin ich mit dem PMD-plugin für eclipse und es gibt mir eine Fehlermeldung, wenn mit System.out.println()
mit der Erklärung:
System.(out|err).drucken verwendet wird, sollten mit einem logger.
Meine Frage ist - Was ist ein Datenlogger? Wie ist es verwendet, um Druck auf den Bildschirm? Warum ist es besser?
InformationsquelleAutor der Frage Amir Rachum | 2010-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen diese kurze Einführung in log4j.
Das Problem ist in der Verwendung
System.out
zu drucken, Fehlersuche oder Diagnose-Informationen. Es ist eine schlechte Praxis, denn Sie können nicht einfach ändern, log-Level, schalten Sie es aus, es anpassen, etc.Allerdings, wenn Sie rechtmäßig über
System.out
zu drucken, die Informationen für die Benutzer, dann können Sie diese Warnung ignorieren.InformationsquelleAutor der Antwort matt b
Wenn Sie mit System.out|err.println(..) zum drucken Benutzer-Informationen auf der Konsole in Ihrer Anwendung main()-Methode, du machst nichts falsch. Können Sie loszuwerden, die Nachricht via einfügen ein Kommentar "//NOPMD".
Gibt es einen "Mark as reviewed"-Option in der PMD-Verstöße gegen die Gliederung für diesen Zweck.
Natürlich können Sie trick PMD mit folgenden code-snippet:
Außerhalb Ihrer main()-Methode verwenden ein Log-System, wie z.B. Log4j.
UPDATE:
Können Sie auch ändern Sie die PMD-Rule "SystemPrintln" verwenden Sie den folgenden XPath:
Diese ignorieren-System.aus.println etc in jeder Methode namens "main" im code, sondern für System.aus.println in Initialisierer-code.
Ich mag diese, weil aus meiner Sicht-System.aus.println ist sicher in der Methode " main(String args[])'. Aber verwenden Sie mit Vorsicht, ich habe zu prüfen, wo im AST-System.aus.println kann auch auftreten, und die Anpassung des XPath.
InformationsquelleAutor der Antwort Michael Konietzka
Unter diesem link finden Sie genauere Informationen zur Verwendung von Log4j: Verwenden Sie nicht System.aus.println! Es hat jedoch nur eine kleine Schwachstelle, sollte man sich lieber nicht setzen Sie die Bibliothek in
/jre/lib/ext
aber nur in der runtime-classpath Ihrer Anwendung und Schiff entlang.Der Vorteil ist, dass Sie verwenden können, logging-Ebenen angeben, die Bedeutung der Informationen, so dass Sie konfigurieren können, extern, welche Ebenen ein - /ausblenden in der Ausgabe (so dass Sie nicht bekommen, verärgert durch die -nach allem unnützen Informationen), wie der output Aussehen soll (z.B. einen Zeitstempel enthalten, thread-ID, classname, methodname, etc), und wohin die Ausgabe geschrieben werden sollten (z.B. die Konsole, eine Datei, eine E-Mail, etc) und im Falle von zum Beispiel Dateien auch, wie Sie erstellt werden soll (z.B. group by Jahr, Monat und/oder Tag).
Gibt es mehrere logger-Implementierungen wie die Java SE builtin
java.util.die Protokollierung.Logger
die convenienced Apache Commons Loggingdie beliebte Apache Log4jseine Nachfolger Logbacketc. Sie können Slf4j wie eine zusätzliche Abstraktionsschicht zum Umschalten zwischen einer dieser Holzfäller, Wann immer erforderlich.InformationsquelleAutor der Antwort BalusC
Scheint es, dass die PMD wird vorausgesetzt, dass Sie anrufen
System.out.println()
für debugging-Zwecke; Sachen wie "Im in ur-Methode ausführen ur codez".Wenn du tust, wirst du eine viel bessere Zeit haben in einem schreiben an einen logger wie Log4Jda es mehrere streaming-Optionen, als Bildschirm.
Wenn aber, dann machst du eine Konsolenanwendung und nennen
System.out
als Teil der, dass, ignorieren Sie die Warnung.InformationsquelleAutor der Antwort Randolpho
Logger verfügt über mehrere Ebenen für die Protokollierung.
Wenn wir schreiben eine echte kurz-Programm, nur für ausbildungszwecke
System.out.println
ist gut, aber wenn wir die Entwicklung eines qualitativ hochwertigen software-Projekt, sollten wir nutzen professionelle logger und SOPs sollte vermieden werden.Einen professionellen Logger bietet verschiedene Ebenen für die Protokollierung und Flexibilität. Wir können die log-Nachricht entsprechend. Zum Beispiel, dass die Gruppe X-Nachrichten gedruckt werden sollen, nur auf die PRODUKTION, Gruppe Y-Nachrichten gedruckt werden sollen, auf FEHLER, etc.
Wir haben nur begrenzte option für die Weiterleitung der Nachrichten in
System.out
aber im Falle eines Loggers Sie haben appenders, die bietet eine Anzahl von Optionen. Wir können sogar erstellen Sie eine benutzerdefinierte Ausgabe-option und leiten es an.InformationsquelleAutor der Antwort kalakanhu
System.out.println
ist nicht gut zu verwenden, da es nicht konfiguriert werden kann. In stead,Logger
kann so konfiguriert werden, melden Sie sich auf verschiedenen Ebenen. Es hat ganze Menge anderer features.InformationsquelleAutor der Antwort fastcodejava