Newsgroup: it.comp.java
Titolo: aiutino e.printStackTrace();

Salve a tutti,
	una domandina veloce.
Quando catturo un'eccezione utilizzo anche questo metodo
e.printStackTrace();
in modo da avere piu dettagli possibili dell'errore occorso.
Ora io vorrei mettere queste informazioni in un file di log invece che 
stamparle semplicemente a video, solo che tutti i metodi 
printStackTrace() ritornano void.
ho provato e.printStackTrace().toString() ma mi da un errore in 
compilazione.
Qualcuno sa come riuscire a convertire tali informazioni in stringa?
grazie alessio

 compilazione.
Ovvviamente, poiche' questo cerca di invocare il metodo toString() sul 
valore ritornato da printStackTrace() che e' ... NIENTE! (void).
Puoi procedere in due modi:
1) Utilizzi una delle altre definizioni del metodo printStackTrace e 
precisamente:
    * public void printStackTrace(PrintStream s)
    * public void printStackTrace(PrintWriter s)
Se il tuo file di log e' un PrintStream usa la prima, se e' un 
PrintWriter la seconda.
2) Utilizzi il metodo getStackTrace che ti ritorna un array di 
StackTraceElement su ciascuno dei quali puoi utilizzare il metodo 
toString().
Non ho verificato se quello che ottieni in questo modo e' esattamente 
quello che stampa printStackTrace(...) ma penso di si. In ogni caso, 
secondo me, e' meglio che utilizzi l'altro metodo.
Andrea Polci

 ha scritto nel messaggio
news:BJ41b.255316$Ny5.7...@twister2.libero.it...

Ciao,
se e' solo un problema di log puoi provare ad utilizzare log4j
(
http://jakarta.apache.org/log4j/docs/index.html
): ti consiglio di
utilizzarlo, dal momento che immagino non loggerai solo le eccezioni, ma
anche messaggi di debug. Altrimenti devi utilizzare i metodi
printStackTrace( PrintStream s) e printStackTrace( PrintWriter s): dai uno
sguardo alla documentazione javadoc della classe Throwable.
Ciao


Ciao,
hai 2 possibilita.
La prima è di usare il metodo public void printStackTrace(PrintStream s),
la seconda è di reindirizzare il System.err al tuo file di log(printStackTrace 
scrive sullo standard error stream, vedi esempio sotto).
Personalmente preferisco la seconda, è + flessibile. Tutti gli errori che vuoi 
mettere nel log li scrivi tramite System.err.println("blah-log") mentre quello 
che vuoi mandare alla console lo scrivi con System.out.println("blah.console").
Marco
public static void main(String[] args) {
     File outputFile = new File("errors.log");
     try {
         PrintStream out = new PrintStream(new FileOutputStream(outputFile));
 
         // OPZIONE 1	
         try {
             throw new IOException();
         } catch (IOException e) {
             e.printStackTrace(out);
         }
 
         // OPZIONE 2
         System.setErr(out);
         try {
             throw new IOException();
         } catch (IOException e) {
             e.printStackTrace();
         }
 
         out.close();
     } catch (IOException e) {}
}

 Qualcuno sa come riuscire a convertire tali informazioni in stringa?
  public static String dump(Throwable t) {
    StringWriter out = new StringWriter();
    t.printStackTrace(new PrintWriter(out));
    return out.toString();
  }
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

vai a vedere su 
http://www.rgagnon.com/javadetails/java-0029.html
l'esempio calza!
--------------------------------
Inviato via 
http://usenet.libero.it