Как перенаправить вывод консоли javaw.exe в файл журнала? - PullRequest
11 голосов
/ 16 декабря 2010

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

@echo off
set TASK=MyApp
TITLE %TASK%
start javaw.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2>&1
taskkill /T /FI "WINDOWTITLE eq %TASK%"

Итак, вышеприведенное работает и фактически убивает окно cmd, которое порождает мое приложение Swing, но оно ничего не записывает в файл журнала, возможно потому, что «start» отбросил процесс от «> log.log» 2> & 1 "arg?

Возможно, я могу исправить это, используя start для вызова другого пакетного файла, но я надеюсь на более элегантный ответ.

Ответы [ 11 ]

6 голосов
/ 16 декабря 2010

Насколько я знаю, использование javaw подавляет весь System.out.println (...) к консоли.

Поэтому вашему приложению необходимо реализовать ведение журнала внутри.Вы можете использовать класс-оболочку для перенаправления вывода, используя System.setOut (...) для записи в файл.Тогда ваш класс-обёртка вызовет вас другой класс.

5 голосов
/ 30 июня 2011

Иногда ваше веб-приложение аварийно завершает работу, и вы не можете понять почему, потому что консоль закрывается при сбое.Чтобы включить ведение журнала консоли в веб-запуске Java с JDK 1.6:

Пуск-> Выполнить ...-> javaws -viewer Закройте средство просмотра кэша Java Вкладка «Дополнительно» -> Отладка отметьте «Включить трассировку» и «Включить ведение журнала»

Теперь ваши файлы журналов можно найти в:

C: \ Documents and Settings \ USER \ Application Data \ Sun \ Java \Развертывание \ журнал

4 голосов
/ 18 марта 2014

Это проще, чем вы думаете.

Вам нужно только изменить System.out:

System.setOut(new PrintStream(new FileOutputStream("log.txt",true)));

И это все!

Удачи.

4 голосов
/ 28 декабря 2010

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

  1. Запустите консоль, свернув ее, чтобы она не раздражала. Это можно сделать, создав ярлык для командного файла, а затем задав свойства ярлыка для запуска командного файла в свернутом окне вместо использования по умолчанию «Нормального окна».

  2. Создайте скрипт для запуска файла bat в скрытом окне, например: http://gallery.technet.microsoft.com/ScriptCenter/en-us/8bbed56f-a7aa-491f-a296-687dd96098a3

  3. Используйте сторонний инструмент, например hstart . (Примечание: согласно djangofan, hstart не был написан для программ на Java и на самом деле не работает)

2 голосов
/ 27 декабря 2010

Это все, что вам нужно в пакетном файле

start / b javaw.exe -cp.; Server.jar; Util.jar com.manage.Program% 1> log.log 2> & 1

не помещайте туда никакой другой информации.После выхода из программы проверьте файл журнала.

2 голосов
/ 23 декабря 2010

Я не понял, почему вы сказали в комментарии Евгению Кулешову, что даже java.exe этого не сделает.

Вы должны быть осторожны, чтобы перенаправить как выходные, так и ошибочные выходные потоки.Обычно при отправке данных на консольный вывод в Java «нормальный» консольный журнал отправляется на System.out, а ошибки - на System.err.DOS cmd обрабатывает это двумя разными потоками.В этом случае вам нужно либо перенаправить поток ошибок в другой файл, например

java.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2> err.log

, либо объединить его в тот же файл, выполнив

java.exe -cp .;Server.jar;Util.jar com.manage.Program %1 > log.log 2>&1

. У нас естьта же проблема при использовании команды start javaw.Мы используем его только в производственной среде и используем приведенный выше java.exe при тестировании.

Конечно, лучшим способом было бы не выводить данные на консоль, что является наилучшей практикой, но кто это делает?;)

1 голос
/ 16 декабря 2010

Вы должны использовать java.exe вместо javaw.exe

0 голосов
/ 07 января 2019

Вы можете использовать эту командную строку в cmd

C:\Program Files\Java\jdk1.8.0_151\bin>javaw -jar D:\ccr_notification\ccr-api-0. 0.1-SNAPSHOT.jar 2>&1 >D:\ccr_notification\output.log

Ссылка https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-6

0 голосов
/ 27 ноября 2017

Приведенный ниже код работал отлично для меня, не меняя ни одной строки кода в моем Java-приложении.

javaw -jar <jar_file>.jar >> <log_file>.log

Извините, я не могу оставлять комментарии к сообщению Ванчинатана, поэтому размещаю ответ здесь.

0 голосов
/ 01 июля 2011

Попробуйте что-то вроде этого JRE\bin\java -cp .;Server.jar;Util.jar com.manage.Program >>log.log или JRE\bin\javaw -cp .;Server.jar;Util.jar com.manage.Program >>log.log

, сохраните вышеперечисленное как пакетный файл и запустите.

...