Könnt ihr mir den Unterschied zwischen "System.out.println("irgendwas");" und System.err.println("irgendwas");" nennen. Wann benutzte ich "System.err"?
2.)
So wie ich das mitbekommen habe kann ich statt "System.err" auch log4j verwenden. Ist log4j in Eclipse integriert oder brauche ich dafür ein Plugin. Wie kann ich "System.err" durch log4j ersetzen?
Könnt ihr mir den Unterschied zwischen "System.out.println("irgendwas");" und System.err.println("irgendwas");" nennen. Wann benutzte ich "System.err"?
System.out ist die Standardausgabe, System.err die Standardfehlerausgabe. Nimm System.err, wenn du Fehler oder Warnungen ausgibst.
So wie ich das mitbekommen habe kann ich statt "System.err" auch log4j verwenden. Ist log4j in Eclipse integriert oder brauche ich dafür ein Plugin. Wie kann ich "System.err" durch log4j ersetzen?
[/quote]
log4j ist kein Ersatz für System.err, sondern ein Logging-Mechanismus. Es ist nicht in Eclipse integeriert, da es mit Eclipse nichts zu tun hat. Daher brauchst du auch kein Plugin.
zu 1.) Es gibt da keine Vor- und Nachteile. Das sind einfach zwei Output Streams. Unbehandelte Exceptions werden standardmäßig in System.err ausgegeben. Der Rest bleibt Dir überlassen.
Generell können viele System.outs oder System.errs den Code verlangsamen. Logger haben den Vorteil, dass sie meistens auf Performance optimiert sind und das man die Möglichkeit hat, die Ausgabe unabhängig zu manipulieren. Du kannst also quasi filtern, was Du wie ausgegeben haben willst.
Lies Dir am besten das mal durch.
zu 2.) log.warn("ich bin ne warnung");
Aber guck Dir wie gesagt den Link an.
und geekigerweise gibt die eclipse-console den .err Stream standardmäßig in roter Farbe aus - was das Finden von Fehlermeldungen erhübscht.. - allerdings muss man da aufpassen, wenn man viele out-Ausgaben hat ... kommen .err Ausgaben häufig nicht unbeding an der "richtigen" Stelle raus, weil die beiden Streams da gegenseitig konkurrieren... - also wenn man den richtigen deterministischen Ablauf eines Programms verfolgen will, dann sollte man alles in outs machen...
Kann es sein, dass "System.err.println("irgendwas");" Ausgaben sofort ausgegeben werden, während "System.out.println("irgendwas");" Ausgaben u.U. nicht sofort ausgegeben werden.
Kann es sein, dass "System.err.println("irgendwas");" Ausgaben sofort ausgegeben werden, während "System.out.println("irgendwas");" Ausgaben u.U. nicht sofort ausgegeben werden.
Ein Anwendungsfall aus der Praxis, für "err" und "out" ist zum Beispiel das umlenken der Standardausgabe.
Unter Linux kannst du die Standardfehlerausgabe z.B. in eine Datei "error" umleiten (oder auch sonst wohin) und die standardausgabe auf dem screen erschein lassen. Kannst die Streams also unabhängig von einanderer auf verschiedenste Art und Weisen verarbeiten. (Ob windows das kann weiß ich nicht)
Log4j bietet sich besonders bei "professioneller" Softwareentwicklung an. Da kannst du dann Log-Messages einbauen und dir dann vom Anwender bei Fehlern die Log-Dateien schicken lassen und damit versuchen eine Ferndiagnose stellen.
Der Vorteil liegt dabei in den EInstellbaren Log-Leven durch die Anzahl der Ausgaben steuern kannst.
Zudem kann man mit Log4j z.B. auch die Methode, Klasswe, Thread ausgeben lassen, in dem ein Logevent aufgetreten ist...
Ach ja, und schneller ist log4j auch noch....