diff --git a/src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java b/src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java index abb858fb..41caa5e2 100644 --- a/src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java +++ b/src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java @@ -252,7 +252,7 @@ private void startPostmaster(Map connectConfig) throws IOExcepti final Process postmaster = builder.start(); if (outputRedirector.type() == ProcessBuilder.Redirect.Type.PIPE) { - ProcessOutputLogger.logOutput(LOG, postmaster); + ProcessOutputLogger.logOutput(LOG, postmaster, "pg_ctl"); } LOG.info("{} postmaster started as {} on port {}. Waiting up to {} for server startup to finish.", instanceId, postmaster.toString(), port, pgStartupWait); @@ -573,20 +573,22 @@ public EmbeddedPostgres start() throws IOException { } } - private static List system(String... command) + private void system(String... command) { try { final ProcessBuilder builder = new ProcessBuilder(command); - builder.redirectError(ProcessBuilder.Redirect.PIPE); - builder.redirectOutput(ProcessBuilder.Redirect.PIPE); builder.redirectErrorStream(true); + builder.redirectError(errorRedirector); + builder.redirectOutput(outputRedirector); final Process process = builder.start(); + + if (outputRedirector.type() == ProcessBuilder.Redirect.Type.PIPE) { + String processName = command[0].replaceAll("^.*[\\\\/](\\w+)(\\.exe)?$", "$1"); + ProcessOutputLogger.logOutput(LOG, process, processName); + } if (0 != process.waitFor()) { throw new IllegalStateException(String.format("Process %s failed%n%s", Arrays.asList(command), IOUtils.toString(process.getErrorStream()))); } - try (InputStream stream = process.getInputStream()) { - return IOUtils.readLines(stream); - } } catch (final RuntimeException e) { // NOPMD throw e; } catch (final Exception e) { diff --git a/src/main/java/io/zonky/test/db/postgres/embedded/ProcessOutputLogger.java b/src/main/java/io/zonky/test/db/postgres/embedded/ProcessOutputLogger.java index fe4b9ed8..6f5dd7c5 100644 --- a/src/main/java/io/zonky/test/db/postgres/embedded/ProcessOutputLogger.java +++ b/src/main/java/io/zonky/test/db/postgres/embedded/ProcessOutputLogger.java @@ -13,12 +13,14 @@ */ package io.zonky.test.db.postgres.embedded; +import org.slf4j.Logger; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import org.slf4j.Logger; +import static org.apache.commons.lang3.StringUtils.isNotBlank; /** * Read standard output of process and write lines to given {@link Logger} as INFO; @@ -61,9 +63,10 @@ public void run() { } } - static void logOutput(final Logger logger, final Process process) { + static void logOutput(final Logger logger, final Process process, final String processName) { + final String threadName = isNotBlank(processName) ? processName + "@" + process.hashCode() : process.toString(); final Thread t = new Thread(new ProcessOutputLogger(logger, process)); - t.setName("output redirector for " + process); + t.setName(threadName); t.start(); } }