2009-03-09 9 views
17

Ho trovato un bug in un'applicazione che blocca completamente la JVM. Lo stacktrace prodotto fornirebbe informazioni preziose per gli sviluppatori e vorrei recuperarlo dalla console Java. Quando la JVM si arresta, la console viene bloccata e non riesco più a copiare il testo contenuto.Come si configura l'output della console Java in un file?

C'è un modo per reindirizzare la console Java direttamente a un file o ad altri mezzi per accedere all'output della console di un'applicazione Java?

Aggiornamento: ho dimenticato di menzionare, senza modificare il codice. Sono un tester manuale.

Aggiornamento 2: questo è in Windows XP ed è in realtà un'applicazione di avvio Web. Piping l'output di

javaws jnlp-url
non funziona (file vuoto).

+0

Per console Java si intende la finestra aperta quando si esegue un'applicazione o un'applet Webstart? – Mark

+0

Esattamente. È un'opzione nelle preferenze Java. –

risposta

22

In realtà è possibile attivare tracing nel Pannello di controllo Java. Questo collegherà tutto ciò che finisce nella console Java in un file di traccia.

I file di registro finiranno in:

  • <user.home> /.java/deployment/log su Unix/Linux
  • < utente cartella Dati applicazioni > \ Sun \ Java \ Deployment \ accedere a Windows
  • /~/Library/Caches/Java/collegarvi OS X
+0

Ho appena trovato questa bella soluzione, grazie per il supporto, ragazzi! –

+0

+1. Stavo per aggiungere questa risposta. – Mark

+0

Puoi dirci perché la console si è bloccata? –

12

(Se è possibile modificare il codice) è possibile impostare il campo System.out ad un valore diverso:

System.setOut(new PrintStream(new FileOutputStream(fileName))); 

Se si esegue uno script (che invoca il programma tramite java) da Unix si poteva fare:

/path/to/script.sh >& path/to/output.log 
+0

Scusa, ho dimenticato di dirlo: senza toccare il codice. Colpa mia! –

+2

Hmm. 'System.out' è' final', quindi non puoi cambiarlo in quel modo per usare 'PrintStream'. È possibile utilizzare 'System.setOut (...)' per fare ciò, ovvero: 'System.setOut (nuovo PrintStream (nuovo FileOutputStream (fileName)))' –

+0

come reindirizzare la traccia dello stack di eccezioni in quel file anche ? –

2

Una console bloccata probabilmente indica un deadlock (potrebbe anche significare ripetizione del lancio di un'eccezione). È possibile ottenere un dump di stack utilizzando jstack. jps potrebbe facilitare la ricerca del processo.

7

In Mac 10.8.2 log potrebbe essere trovato a /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/.

Prima di abilitare la registrazione dal Pannello di controllo Java. L'opzione "Enable logging" è nella scheda "Advanced". Java Control Panel potrebbe essere avviato da "System preferences".

0

provare this guide funziona per me. ti guida anche come puoi impostare "System.setOut (fileStream)", "System.setErr (fileStream);"

Problemi correlati