Это, конечно, простое упражнение для передачи выходных данных через фильтр, в данном случае это команда tee
, которая выполняется в интерпретаторе команд Microsoft почти так же, как в TCC / LE от JP Software и (не-C-семейство оболочек) Оболочки Unix:
java -classpath lib.jar com.hertz.test.Blad 2>&1 | tee error-and-output.log
По-разному трактовать стандартный вывод и стандартную ошибку - это немного больше, чем упражнение в синтаксисе перенаправления, для которого этот пример здесь является лишь одной из нескольких возможностей и является отдельным вопросом.
java -classpath lib.jar com.hertz.test.Blad 2>&1 1>con | tee error.log
Осталось только получить команду tee
.Существует несколько возможностей:
- Использовать порт команды Unix
tee
. Существует несколько вариантов.Чаще всего упоминаются GNUWin32 , cygwin и unxutils .Менее известны, но в некоторых отношениях лучше, инструменты из набора утилит SFUA , которые запускаются в подсистеме для приложений на основе UNIX , которая поставляется в комплекте с Windows7 Ultimate Edition и Windows Server 2008 R2.(Для Windows XP и Windows Server 2003 можно загрузить и установить Службы для UNIX версии 3.5 .) Этот инструментарий содержит большое количество инструментов TUI для командной строки, начиная с mv
и du
, через оболочки Корна и С, до perl
и awk
.Он выпускается в версиях x86-64 и IA64, а также x86-32.Программы работают в собственном POSIX-окружении Windows, а не с DLL-библиотеками эмулятора (такими как cygwin1.dll
), наслоенными поверх Win32.И да, инструментарий имеет tee
, а также около 300 других. - Используйте одну из множества собственных команд Win32
tee
, которые люди написали и опубликовали. Одна из таких Ritchie Lawrence's MTEE
, который, как вы можете видеть, имеет /D
и /T
опции для добавления меток времени и даты к каждой строке, которую он обрабатывает. - Используйтезаменяющий интерпретатор команд, который поставляется со встроенной командой
TEE
. JP Software TCC / LE является одним из таких.TCC / LE имеет встроенную TEE
команду .Как видите, у него также есть опции /D
и /T
для добавления меток времени и даты к каждой обрабатываемой строке.
В качестве отступления: для вашего приложения лучше добавить датуи сами отметки времени, чем для последующей обработки командой TEE
.По нескольким причинам, связанным как с тем, как приложения ведут себя, когда их стандартные потоки являются каналами, так и с тем, как работают каналы, каждая строка вывода не обязательно будет обрабатываться TEE
в тот момент, когда ваше приложение сначала ее сгенерировало.Эта свобода повлияет как на относительную (по отношению друг к другу), так и на абсолютную (по отношению к настенным часам) точность отметок времени, которые вы видите.