2016-02-25 4 views
1

Я запускаю процесс с ProcessBuilder и хочу записать вывод в log4j. Как я могу это достичь?Запись вывода процесса в log4j

Я знаю, что я могу перенаправить вывод процесса в файл, а затем прочитать этот файл, но я надеюсь, что есть более простой способ.

Я хотел бы избежать, чтобы написать собственную реализацию OutputStream, если есть более простое решение. Я надеюсь, что я не первый, кто хотел бы получить выход на ProcessBuilder как «хороший объект Java», как

List<String> 

или что-то другое, что легко обрабатывать.

+0

Возможный дубликат [Log4J: Как перенаправить OutputStream или Writer на автора (-ов) регистратора?] (Http://stackoverflow.com/questions/6995946/log4j-how-do-i-redirect-an- OutputStream или писатель-к-лесорубов-писателей) –

ответ

0

Вы можете использовать Process.getInputStream() и/или Process.getErrorStream() для получения вывода и записать его в log4j. Например:

private static final Logger LOG = Logger.getLogger(MyClass.class); 
.... 
ProcessBuilder pBuilder = new ProcessBuilder("MyProcess").redirectErrorStream(true); 
Process process = pBuilder.start(); 
LOG.info(new String(IOUtils.toByteArray(process.getInputStream()))); 

Если это процесс, который проходит много времени, а иногда и обеспечивает выход, то лучше поставить последнюю строку в отдельном потоке.