2009-03-09 11 views
17

JVMを完全にフリーズさせるアプリケーションにバグが見つかりました。生成されたスタックトレースは、開発者にとって有益な情報を提供し、Javaコンソールから取得することができます。 JVMがクラッシュすると、コンソールがフリーズし、含まれているテキストをもうコピーできなくなります。Javaコンソール出力をファイルにパイプするにはどうすればよいですか?

Javaコンソールをファイルに直接パイプする方法や、Javaアプリケーションのコンソール出力にアクセスする他の手段はありますか?

更新:コードを変更することなく、言及を忘れました。私はマニュアルテスターです。

更新2:これはWindows XPの下にあり、実際にはWebアプリケーションです。

javaws jnlp-url
の出力をパイプしても機能しません(空のファイル)。

+0

Javaコンソールとは、Webスタートアプリケーションまたはアプレットの実行時に開いたウィンドウを意味しますか? – Mark

+0

正確です。これはJavaの設定のオプションです。 –

答えて

22

実際には、Javaコントロールパネルでtracingを有効にすることができます。これは、Javaコンソールで終わるものをトレースファイルにパイプします。

ログファイルがになってしまいます:UNIX/Linux上で

  • <のuser.home > /.java/deployment/logを
  • <ユーザアプリケーションデータフォルダ>日\のJava \ \展開\ Windowsの
  • /〜/ライブラリ/キャッシュ/ Javaの上ログイン/
+0

ちょうどこの素晴らしいソリューションを見つけた、サポートのおかげで、みんな! –

+0

+1。私はちょうどこの答えを追加しようとしていた。 – Mark

+0

なぜコンソールが凍結したか教えていただけますか? –

12

(あなたは、コードを変更することができる場合)あなたが別の値にSystem.outフィールドを設定することができます:あなたはあなたができるUnixから(java経由でプログラムを起動する)スクリプトを実行している場合は

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

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

申し訳ありませんが、私は言及を忘れていました:コードに触れることなく。 Mea culpa! –

+2

Hmm。 'System.out'は' final'なので、 'PrintStream'を使うように変更することはできません。 'System.setOut(new PrintStream(new FileOutputStream(fileName))); ' –

+0

このファイルに例外スタックトレースもリダイレクトする方法は、' System.setOut(...) ? –

2

フリーズされたコンソールは、おそらくデッドロックを意味します(繰り返しのスローを意味することもあります)。 jstackを使用してスタックダンプを取得できます。 jpsはプロセスを簡単に見つけることができます。

7

がマックでは10.8.2ログは/Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/で見つけることができるOS Xにログインします。

Javaコントロールパネルからログを有効にする前に、オプション「Enable logging」はタブ「Advanced」にあります。 Javaコントロールパネルは「System preferences」から開始できます。

0

try this guideそれは私のために働く。それはまた、 "System.setOut(fileStream);"、 "System.setErr(fileStream);"

関連する問題