2009-03-09 2 views
17

Я нашел ошибку в приложении, которое полностью замораживает JVM. Произведенная stacktrace предоставит ценную информацию разработчикам, и я хотел бы получить ее с консоли Java. Когда JVM аварийно завершает работу, консоль замораживается, и я больше не могу копировать содержащийся текст.Как передать вывод консоли Java в файл?

Есть ли способ напрямую подключить консоль Java к файлу или другим средствам доступа к выходному файлу приложения Java?

Обновление: Я забыл упомянуть, не меняя код. Я ручной тестер.

Обновление 2: Это под Windows XP, и на самом деле это приложение для веб-запуска. Трубопровод вывода

javaws jnlp-url
не работает (пустой файл).

+0

С помощью консоли Java вы имеете в виду, что окно открыто при запуске приложения или апплета веб-центра? – Mark

+0

Точно. Это вариант в настройках Java. –

ответ

22

На самом деле можно активировать tracing в панели управления Java. Это приведет к подключению всего, что заканчивается на консоли Java в файле трассировки.

файлы журнала будут в конечном итоге в:

  • <user.home> /.java/deployment/log на Unix/Linux
  • < User Application Data Folder > \ Sun \ Java \ Deployment \ войти в систему Windows,
  • /~/Library/кэши/Java/войти в систему OS X
+0

Просто нашел это приятное решение, спасибо за поддержку, ребята! –

+0

+1. Я как раз собирался добавить этот ответ. – Mark

+0

Можете ли вы рассказать нам, почему консоль застыла? –

12

(Если вы можете изменить код) вы можете установить System.out поля на другое значение:

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

Если вы используете скрипт (вызывающую программу через java) от Unix вы могли бы сделать:

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

Извините, я забыл упомянуть: не касаясь кода. Моя вина! –

+2

Хм. 'System.out' является' final', поэтому вы не можете изменить его так, чтобы использовать 'PrintStream'. Вы можете использовать 'System.setOut (...)' для этого, то есть: 'System.setOut (новый PrintStream (новый FileOutputStream (имя_файла)));' –

+0

как перенаправить трассировку стека исключений в этот файл ? –

2

Замороженная консоль, вероятно, означает тупик (это также может означать повторное бросание исключения). Вы можете получить дамп стека, используя jstack. jps может облегчить поиск процесса.

7

В Mac 10.8.2 журналы можно найти на /Users/<userName>/Library/Application Support/Oracle/Java/Deployment/log/.

Прежде чем вы сможете включить ведение журнала с панели управления Java. Опция «Enable logging» находится на вкладке «Advanced». Панель управления Java можно запустить с «System preferences».

0

try this guide это работает для меня. он также подскажет вам, как вы можете установить «System.setOut (fileStream)», «System.setErr (fileStream)»;

Смежные вопросы