# "System.out" "System.err" bzw. log4j



## Malcolm X (20. Nov 2006)

Hallo,

ich hätte zwei Fragen:

1.)

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?


----------



## hupfdule (20. Nov 2006)

Malcolm X hat gesagt.:
			
		

> 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.


----------



## Malcolm X (20. Nov 2006)

zu 1.)

Welchen Vorteil hat es denn wenn ich bei Fehlern oder Warnungen "System.err" statt "System.out" benutzte?

zu 2.)

Mal angenommen ich will eine Warnung loggen. Wie würde das denn beispielsweise im Java-Code aussehen?


----------



## byte (20. Nov 2006)

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.


----------



## SnooP (20. Nov 2006)

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...


----------



## Malcolm X (20. Nov 2006)

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.


----------



## hupfdule (20. Nov 2006)

Malcolm X hat gesagt.:
			
		

> 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.


Nein. Das ist vom Zufall abhängig.


----------



## Guest (21. Nov 2006)

SnooP hat gesagt.:
			
		

> was das Finden von Fehlermeldungen *erhübscht*..



Was es alles gibt!  :shock: 

Man lernt eben nie aus...


----------



## anderer Gast (21. Nov 2006)

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.


----------



## meez (21. Nov 2006)

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....


----------

