如何将Java控制台输出传递给文件?

我在应用程序中发现了一个完全冻结JVM的错误。 生成的堆栈跟踪将为开发人员提供有价值的信息,我想从Java控制台检索它。 当JVM崩溃时,控制台被冻结,我无法再复制包含的文本。

有没有办法将Java控制台直接传递给文件或其他一些访问Java应用程序的控制台输出的方法?

更新:我忘记提及,而不更改代码。 我是一名手动测试员。

更新2:这是在Windows XP下,它实际上是一个Web启动应用程序。 管道输出

  javaws jnlp-url 

不起作用(空文件)。

实际上,可以在Java控制面板中激活跟踪 。 这将在跟踪文件中管理最终在Java控制台中的任何内容。

日志文件最终会出现在:

  • Unix / Linux上的 /.java / deployment / log
  • Windows上的<用户应用程序数据文件夹> \ Sun \ Java \ Deployment \ log
  • /〜/ Library / Caches / Java /登录OS X.

(如果可以修改代码),可以将System.out字段设置为其他值:

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

如果你从Unix运行一个脚本(通过java调用程序),你可以这样做:

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

在Mac 10.8.2中,可以在/Users//Library/Application Support/Oracle/Java/Deployment/log/

必须从Java控制面板启用日志记录之前。 选项“ Enable logging ”位于“ Advanced ”选项卡。 可以从“ System preferences ”启动Java控制面板。

冻结控制台可能意味着死锁(它也可能意味着重复抛出exception)。 您可以使用jstack获取堆栈转储。 jps可能使查找过程更容易。

试试这个指南它对我有用。 它还指导您如何设置“System.setOut(fileStream);”,“System.setErr(fileStream);”