# e.printStackTrace Ausgabe in Datei umleiten?



## Xams (12. Jun 2007)

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


----------



## Wildcard (12. Jun 2007)

Du kannst den error Stream umleiten, oder von aussen pipen.
In jedem Fall ist aber die Verwendung eines Loggers geschickter.


----------



## Xams (12. Jun 2007)

Wie leite ich denn den Error Strem um?


----------



## bygones (12. Jun 2007)

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)


----------



## Xams (12. Jun 2007)

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.


----------



## The_S (12. Jun 2007)

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.


```
System.setOut(deinStream);
```


----------



## Wildcard (12. Jun 2007)

Nö Hobbit.
setErr


----------



## The_S (12. Jun 2007)

Äh ... ja ... stimmt natürlich


----------



## Xams (12. Jun 2007)

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


Errors sollte man doch nicht behandeln...
Aber Danke.


----------



## kleiner_held (12. Jun 2007)

Mit ErrorStream umleiten meint Wildcard den ErrorStream der ganzen VM umzuleiten.
Also sowas wie

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


----------



## Xams (12. Jun 2007)

Ich hab das jetzt bei mir so gemacht:

```
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?


----------



## Xams (12. Jun 2007)

Der Code von Kleiner Held geht übrigens nicht. :wink:


----------



## kleiner_held (12. Jun 2007)

Ups, na klar, da muss natuerlich noch der FileOutputStream mit einem PrintStream gewrappt werden.


----------



## The_S (12. Jun 2007)

Java-Freak hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...



Naja, ich meinte eher Exceptions. Errors sollten gar nicht erst auftreten


----------



## bygones (12. Jun 2007)

Java-Freak hat gesagt.:
			
		

> Ich hab das jetzt bei mir so gemacht:
> 
> ```
> PrintStream pw = null;
> ...


öh... entweder ich versteh was nicht oder du solltest echt meine antwort nochmal lesen

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


----------

