Как мне передать вывод консоли Java в файл?

18

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

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

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

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

javaws jnlp-url
не работает (пустой файл).     
задан Cedric Meury 09.03.2009 в 15:12
источник
  • С помощью консоли Java вы имеете в виду, что окно открыто при запуске приложения или апплета webstart? –  Mark 09.03.2009 в 15:26
  • Точно. Это вариант в настройках Java. –  Cedric Meury 09.03.2009 в 15:29

5 ответов

22

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

В файлах журналов будет указано:

  • & lt; user.home & gt; /. java / deploy / log in Unix / Linux
  • & lt; Папка данных пользовательских приложений & gt; \ Sun \ Java \ Deployment \ log в Windows
  • / ~ / Библиотека / Кэши / Java / журнал OS X
ответ дан Cedric Meury 09.03.2009 в 15:51
источник
  • Просто нашел это приятное решение, спасибо за поддержку, ребята! –  Cedric Meury 09.03.2009 в 15:51
  • +1. Я как раз собирался добавить этот ответ. –  Mark 09.03.2009 в 15:53
  • Можете ли вы рассказать нам, почему консоль застыла? –  Tom Hawtin - tackline 09.03.2009 в 16:01
  • Не совсем, я не понимаю, что трассировка стека хороша, так как я не разработчик этой команды. Насколько я могу судить, это связано с покраской некоторых компонентов и потоком рассылки событий (как обычно, ха-ха). –  Cedric Meury 09.03.2009 в 16:07
  • @Ced: вы должны отметить это как принято. –  James Van Huis 09.03.2009 в 16:10
Показать остальные комментарии
12

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

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

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

/path/to/script.sh >& path/to/output.log
    
ответ дан oxbow_lakes 09.03.2009 в 15:14
источник
  • Извините, я забыл упомянуть: не касаясь кода. Моя вина! –  Cedric Meury 09.03.2009 в 15:17
  • Хм. System.out является окончательным, поэтому вы не можете его изменить, чтобы использовать PrintStream. Вы можете использовать System.setOut (...) для этого, т. Е .: System.setOut (новый PrintStream (новый FileOutputStream (имя_файла))); –  Allen George 22.01.2010 в 20:41
  • как перенаправить трассировку стека исключений в этом файле? –  Muhammad Suleman 26.03.2014 в 11:42
8

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

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

    
ответ дан Jan Jirout 06.11.2012 в 13:42
источник
2

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

    
ответ дан Tom Hawtin - tackline 09.03.2009 в 15:26
источник
0

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

    
ответ дан Muhammad Suleman 26.03.2014 в 12:03
источник