web-dev-qa-db-ja.com

Javaコンソール出力をファイルにパイプするにはどうすればよいですか?

JVMを完全にフリーズするアプリケーションのバグを見つけました。生成されたスタックトレースは開発者に貴重な情報を提供し、Javaコンソールから取得したいと思います。JVMがクラッシュすると、コンソールがフリーズし、含まれているテキストをコピーできなくなります。

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

更新:コードを変更せずに、言及するのを忘れました。私は手動テスト担当者です。

アップデート2:これはWindowsの下にありますXPそしてそれは実際にはWebStartアプリケーションです。

javaws jnlp-url
18
Cedric Meury

実際には、Javaコントロールパネルで トレース をアクティブ化できます。これにより、トレースでJavaコンソールに到達するものはすべてパイプされますファイル。

ログファイルは次のようになります。

  • <user.home> /.Java/deployment/log(Unix/Linuxの場合)
  • <ユーザーアプリケーションデータフォルダー>\Sun\Java\Deployment\log on Windows
  • /〜/ Library/Caches/Java/log on OS X
23
Cedric Meury

(コードを変更できる場合)System.outフィールドを別の値に設定できます。

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

Javaからスクリプトを実行している場合(Unixを介してプログラムを呼び出す)、次のことができます。

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

Mac 10.8.2では、ログは/Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/にあります。

Javaコントロールパネル。オプション "Enable logging"はタブ "Advanced"にあります。Javaコントロールパネルは「System preferences」から起動できます。

8
Jan Jirout

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

試してください このガイド それは私のために働きます。また、「System.setOut(fileStream);」、「System.setErr(fileStream);」を設定する方法についても説明します。

0