From 824a788b6fb693a41809acc5723e090104ca8a1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Van=C4=9Bk?= Date: Tue, 4 Sep 2018 16:37:05 +0200 Subject: [PATCH 1/2] fix logging of initdb process --- .../test/db/postgres/embedded/EmbeddedPostgres.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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..1b237fac 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 @@ -573,20 +573,21 @@ 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) { + ProcessOutputLogger.logOutput(LOG, process); + } 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) { From 2ec4d9021ddceea575308708b969a1b230cdfb9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Van=C4=9Bk?= Date: Sun, 21 Oct 2018 18:47:17 +0200 Subject: [PATCH 2/2] improve process logging --- .../test/db/postgres/embedded/EmbeddedPostgres.java | 5 +++-- .../test/db/postgres/embedded/ProcessOutputLogger.java | 9 ++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) 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 1b237fac..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); @@ -583,7 +583,8 @@ private void system(String... command) final Process process = builder.start(); if (outputRedirector.type() == ProcessBuilder.Redirect.Type.PIPE) { - ProcessOutputLogger.logOutput(LOG, process); + 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()))); 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(); } }