e.printStackTrace Ausgabe in Datei umleiten?

Status
Nicht offen für weitere Antworten.

Xams

Bekanntes Mitglied
Falls in einem Programm ein Error oder eine nicht behandelte Exeption auftriitt wird ja vor beenden e.printStackTrace
aufgerufen. Lässt sich diese Ausgabe in eine Datei umleiten.
MFG
 
Du kannst den error Stream umleiten, oder von aussen pipen.
In jedem Fall ist aber die Verwendung eines Loggers geschickter.
 
wie schau ich in die API ?

http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)
http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)
 
Wie schaue ich in die Frage?
Dein Link hilf mir nicht viel, da ich nicht selber printStackTrace aufrufe, sondern das von der VM automatisch geschieht,wenn ein nicht behandelter Error oder Exception auftritt.
 
Normalerweiße sollte dein Programm so geschrieben sein, dass keine nicht-behandelten Fehler auftreten können.

Du könntest die Hauptausgabe von der Konsole in eine Datei umleiten.

Code:
System.setOut(deinStream);
 
Hobbit_Im_Blutrausch hat gesagt.:
Normalerweiße sollte dein Programm so geschrieben sein, dass keine nicht-behandelten Fehler auftreten können.

Du könntest die Hauptausgabe von der Konsole in eine Datei umleiten.

Code:
System.setOut(deinStream);
Errors sollte man doch nicht behandeln...
Aber Danke.
 
Mit ErrorStream umleiten meint Wildcard den ErrorStream der ganzen VM umzuleiten.
Also sowas wie
Code:
FileOutputStream out = new FileOutputStream("error.log");
System.setErr(out);

Man kann auch einen UncaughtExceptionHandler fuer den aktuellen Thread oder fuer alle Threads setzen, da kann man die Exceptions auch anderes verwerten, als sie nur zu loggen.

Thread.setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
Thread.setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

Edit: Mist, ich bin ja schon wieder sowas von langsam mit tippen
 
Ich hab das jetzt bei mir so gemacht:
Code:
PrintStream pw = null;
	try {
		pw = new PrintStream("Errors.txt");
	} catch (FileNotFoundException e) {
		pw = new PrintStream(System.err);
		e.printStackTrace();
	}
	  System.setErr(pw);
Wie bekomme ich das jetzt hin, dass die Datei nicht überschrieben wird, sondern der bisherige Inhalt beibehalten und das neue nur hinten drangehangen wird?
 
Java-Freak hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Normalerweiße sollte dein Programm so geschrieben sein, dass keine nicht-behandelten Fehler auftreten können.

Du könntest die Hauptausgabe von der Konsole in eine Datei umleiten.

Code:
System.setOut(deinStream);
Errors sollte man doch nicht behandeln...
Aber Danke.

Naja, ich meinte eher Exceptions. Errors sollten gar nicht erst auftreten 😉
 
Java-Freak hat gesagt.:
Ich hab das jetzt bei mir so gemacht:
Code:
PrintStream pw = null;
	try {
		pw = new PrintStream("Errors.txt");
	} catch (FileNotFoundException e) {
		pw = new PrintStream(System.err);
		e.printStackTrace();
	}
	  System.setErr(pw);
Wie bekomme ich das jetzt hin, dass die Datei nicht überschrieben wird, sondern der bisherige Inhalt beibehalten und das neue nur hinten drangehangen wird?
öh... entweder ich versteh was nicht oder du solltest echt meine antwort nochmal lesen
Code:
PrintStream pw = new PrintStream("Errors.txt", true);
	try {
             // blabla
	} catch (FileNotFoundException e) {
		e.printStackTrace(pw);
	}
	  System.setErr(pw);
einfach am anfang den stream / writer erstellen und die instanz der methode mitgeben....
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben