2009-03-09 17 views
17

Encontré un error en una aplicación que congela completamente la JVM. La stacktrace producida proporcionaría información valiosa para los desarrolladores y me gustaría recuperarla de la consola de Java. Cuando la JVM falla, la consola se congela y ya no puedo copiar el texto contenido.¿Cómo canalizo la salida de la consola Java a un archivo?

¿Hay alguna manera de canalizar la consola de Java directamente a un archivo u otro medio para acceder a la salida de la consola de una aplicación Java?

Actualización: Olvidé mencionarlo, sin cambiar el código. Soy un probador manual.

Actualización 2: esto es en Windows XP y en realidad es una aplicación de inicio web. La salida de

javaws jnlp-url
de tubería no funciona (archivo vacío).

+0

Por consola de Java, ¿quiere decir la ventana abierta cuando se ejecuta una aplicación web o un applet? – Mark

+0

Exactamente. Es una opción en las preferencias de Java. –

Respuesta

22

En realidad, se puede activar tracing en el Panel de control de Java. Esto canalizará todo lo que termine en la consola de Java en un archivo de rastreo.

Los archivos de registro va a terminar en:

  • <user.home> /.java/deployment/log en Unix/Linux
  • < usuario carpeta Datos de programa > \ Sun \ Java \ Deployment \ iniciar la sesión de Windows
  • /~/Library/Caches/Java/log en OS X
+0

Acabo de encontrar esta buena solución, gracias por el apoyo, chicos! –

+0

+1. Estaba a punto de agregar esta respuesta. – Mark

+0

¿Puede decirnos por qué la consola se congeló? –

12

(si se puede modificar el código) se puede establecer el campo System.out a un valor diferente:

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

Si está ejecutando una secuencia de comandos (invocando el programa a través java) de Unix que podría hacer:

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

Lo siento, olvidé mencionar: sin tocar el código. ¡Mea culpa! –

+2

Hmm. 'System.out' es' final', por lo que no puede cambiarlo así para usar 'PrintStream'. Puede usar 'System.setOut (...)' para hacer eso, es decir: 'System.setOut (nuevo PrintStream (nuevo FileOutputStream (fileName)));' –

+0

cómo redirigir el rastreo de pila de excepciones en ese archivo también ? –

2

una consola congelada probablemente significa un punto muerto (también podría significar el lanzamiento repetido de una excepción). Puede obtener un volcado de pila usando jstack. jps puede facilitar la búsqueda del proceso.

7

en Mac 10.8.2 registros se puede conocer en /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/.

Antes tiene que habilitar el registro desde el Panel de control de Java. La opción "Enable logging" está en la pestaña "Advanced". El Panel de control de Java se puede iniciar desde "System preferences".

0

prueba this guide me funciona. también le guía sobre cómo puede configurar "System.setOut (fileStream);", "System.setErr (fileStream);"

Cuestiones relacionadas