Print hook stdout/stderr in case of a non-zero exit code Prior to this change the hook output was only printed when the logging level was at least DEBUG. However, when a hook exits with an error we need to read the hook output in order to get more details about the error. Release-Notes: Print hook stdout/stderr in case of a non-zero exit code Change-Id: I24b9f69c9faea561d7fce0b3818801dd64852729
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java index b7a0784..c5837c4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java +++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
@@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; +import java.util.logging.Level; import org.eclipse.jgit.lib.Repository; class HookTask { @@ -124,22 +125,27 @@ int exitValue = result.getExitValue(); if (exitValue != 0) { logger.atSevere().log("hook[%s] exited with error status: %d", name, exitValue); + printHookOutput(name, result, Level.SEVERE); } if (logger.atFine().isEnabled()) { - try (BufferedReader br = new BufferedReader(new StringReader(result.getOutput()))) { - br.lines() - .filter(s -> !s.isEmpty()) - .forEach(line -> logger.atFine().log("hook[%s] output: %s", name, line)); - } catch (IOException iox) { - logger.atSevere().withCause(iox).log("Error writing hook [%s] output", name); - } + printHookOutput(name, result, Level.FINE); } } return result; } + private void printHookOutput(String name, HookResult result, Level logLevel) { + try (BufferedReader br = new BufferedReader(new StringReader(result.getOutput()))) { + br.lines() + .filter(s -> !s.isEmpty()) + .forEach(line -> logger.at(logLevel).log("hook[%s] output: %s", name, line)); + } catch (IOException iox) { + logger.atSevere().withCause(iox).log("Error writing hook [%s] output", name); + } + } + @Override public String toString() { return "hook " + hook.getFileName();