18

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

有没有办法将 Java 控制台直接通过管道传输到文件或其他访问 Java 应用程序控制台输出的方法?

更新:我忘了提,没有改变代码。我是手动测试员。

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

javaws jnlp-url
不起作用(空文件)。

4

5 回答 5

23

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

日志文件将结束于:

  • Unix/Linux 上的 <user.home>/.java/deployment/log
  • <用户应用程序数据文件夹>\Sun\Java\Deployment\log 在 Windows 上
  • /~/库/缓存/Java/在 OS X 上登录
于 2009-03-09T14:51:01.677 回答
12

(如果您可以修改代码)您可以将该System.out字段设置为不同的值:

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

如果您正在运行脚本(通过 调用程序java),Unix您可以执行以下操作:

/path/to/script.sh >& path/to/output.log
于 2009-03-09T14:14:58.753 回答
8

在 Mac 10.8.2 中,可以在/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".

于 2012-11-06T12:42:28.643 回答
2

冻结的控制台可能意味着死锁(也可能意味着重复抛出异常)。您可以使用jstack. jps可能会使查找过程更容易。

于 2009-03-09T14:26:33.997 回答
0

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

于 2014-03-26T11:03:36.760 回答