Package com.jcabi.log

Class VerboseProcess

java.lang.Object
com.jcabi.log.VerboseProcess
All Implemented Interfaces:
Closeable, AutoCloseable

public final class VerboseProcess extends Object implements Closeable
Utility class for getting stdout from a running process and logging it through SLF4J.

For example:

 String name = new VerboseProcess(
   new ProcessBuilder("who", "am", "i")
 ).stdout();

The class throws an exception if the process returns a non-zero exit code.

The class is thread-safe.

Since:
0.5
  • Constructor Details

    • VerboseProcess

      public VerboseProcess(Process prc)
      Public ctor.
      Parameters:
      prc - The process to work with
    • VerboseProcess

      public VerboseProcess(ProcessBuilder builder)
      Public ctor (builder will be configured to redirect error input to the stdout and will receive an empty stdin).
      Parameters:
      builder - Process builder to work with
    • VerboseProcess

      public VerboseProcess(Process prc, Level stdout, Level stderr)
      Public ctor, with a given process and logging levels for stdout and stderr. Neither stdout nor stderr cannot be set to Level.ALL because it is intended to be used only for internal configuration.
      Parameters:
      prc - Process to execute and monitor
      stdout - Log level for stdout
      stderr - Log level for stderr
      Since:
      0.11
    • VerboseProcess

      public VerboseProcess(ProcessBuilder bdr, Level stdout, Level stderr)
      Public ctor, with a given process and logging levels for stdout and stderr.
      Parameters:
      bdr - Process builder to execute and monitor
      stdout - Log level for stdout
      stderr - Log level for stderr
      Since:
      0.12
  • Method Details

    • stdout

      public String stdout()
      Get stdout from the process, after its finish (the method will wait for the process and log its output).

      The method will check process exit code, and if it won't be equal to zero a runtime exception will be thrown. A non-zero exit code usually is an indicator of problem. If you want to ignore this code, use stdoutQuietly() instead.

      Returns:
      Full stdout of the process
    • stdoutQuietly

      public String stdoutQuietly()
      Get stdout from the process, after its finish (the method will wait for the process and log its output).

      This method ignores exit code of the process. Even if it is not equal to zero (which usually is an indicator of an error), the method will quietly return its output. The method is useful when you're running a background process. You will kill it with Process.destroy(), which usually will lead to a non-zero exit code, which you want to ignore.

      Returns:
      Full stdout of the process
      Since:
      0.10
    • waitFor

      Wait for the process to stop, logging its output in parallel.
      Returns:
      Stdout produced by the process
      Throws:
      InterruptedException - If interrupted in between
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable