How do I pipe the Java console output to a file?
Asked Answered
P

5

18

I found a bug in an application that completely freezes the JVM. The produced stacktrace would provide valuable information for the developers and I would like to retrieve it from the Java console. When the JVM crashes, the console is frozen and I cannot copy the contained text anymore.

Is there way to pipe the Java console directly to a file or some other means of accessing the console output of a Java application?

Update: I forgot to mention, without changing the code. I am a manual tester.

Update 2: This is under Windows XP and it's actually a web start application. Piping the output of

javaws jnlp-url
does not work (empty file).
Precentor answered 9/3, 2009 at 14:12 Comment(2)
By Java console do you mean the window opened when running a webstart application or applet?Ghee
Exactly. It's an option in the Java preferences.Precentor
P
23

Actually one can activate tracing in the Java Control Panel. This will pipe anything that ends up in the Java console in a tracing file.

The log files will end up in:

  • <user.home>/.java/deployment/log on Unix/Linux
  • <User Application Data Folder>\Sun\Java\Deployment\log on Windows
  • /~/Library/Caches/Java/log on OS X
Precentor answered 9/3, 2009 at 14:51 Comment(5)
Can you tell us why the console froze?Oldtime
Not really, I don't understand the stack trace all to good, as I am not a developer on this team. As far as I can tell, it is related to painting some components and the event-dispatch thread (as usual, haha).Precentor
Yup, I will do that, James. It's just that the system does not let you do that before 48 hours have passed.Precentor
On Os X 10.8.5, I found the log and trace at ~/Library/Application Support/Oracle/Java/Deployment/log/Bose
@TimDearborn The answer by Jan below points this out, you might want to upvote that one.Precentor
C
12

(If you can modify the code) you can set the System.out field to a different value:

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

If you are running a script (invoking the program via java) from Unix you could do:

/path/to/script.sh >& path/to/output.log
Conation answered 9/3, 2009 at 14:14 Comment(3)
Sorry, I forgot to mention: Without touching the code. Mea culpa!Precentor
Hmm. System.out is final, so you can't change it like that to use PrintStream. You could use System.setOut(...) to do that, i.e.: System.setOut(new PrintStream(new FileOutputStream(fileName)));Isomeric
how to redirect exceptions stack trace in that file also ?Henson
C
8

In Mac 10.8.2 logs could be found at /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/.

Before you have to enable logging from Java Control Panel. Option "Enable logging" is at tab "Advanced". Java Control Panel could be started from "System preferences".

Cepheus answered 6/11, 2012 at 12:42 Comment(0)
O
2

A frozen console probably means a deadlock (it could also mean repeated throwing of an exception). You can get a stack dump using jstack. jps may make finding the process easier.

Oldtime answered 9/3, 2009 at 14:26 Comment(0)
H
0

try this guide it works for me. it also guides you that how you can set "System.setOut(fileStream);", "System.setErr(fileStream);"

Henson answered 26/3, 2014 at 11:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.