public DefaultLoggingManager start() {
    started = true;
    for (StandardOutputListener stdoutListener : stdoutListeners) {
      loggingOutput.addStandardOutputListener(stdoutListener);
    }
    for (StandardOutputListener stderrListener : stderrListeners) {
      loggingOutput.addStandardErrorListener(stderrListener);
    }
    for (OutputEventListener outputEventListener : outputEventListeners) {
      loggingOutput.addOutputEventListener(outputEventListener);
    }
    loggingSystem.start();
    javaUtilLoggingSystem.start();
    stdOutLoggingSystem.start();
    stdErrLoggingSystem.start();

    return this;
  }
 public DefaultLoggingManager stop() {
   try {
     CompositeStoppable.stoppable(
             loggingSystem, javaUtilLoggingSystem, stdOutLoggingSystem, stdErrLoggingSystem)
         .stop();
     for (StandardOutputListener stdoutListener : stdoutListeners) {
       loggingOutput.removeStandardOutputListener(stdoutListener);
     }
     for (StandardOutputListener stderrListener : stderrListeners) {
       loggingOutput.removeStandardErrorListener(stderrListener);
     }
     for (OutputEventListener listener : outputEventListeners) {
       loggingOutput.removeOutputEventListener(listener);
     }
   } finally {
     started = false;
   }
   return this;
 }
 public void attachSystemOutAndErr() {
   loggingOutput.attachSystemOutAndErr();
 }
 public void attachProcessConsole(ConsoleOutput consoleOutput) {
   loggingOutput.attachProcessConsole(consoleOutput);
 }
 public void attachAnsiConsole(OutputStream outputStream) {
   loggingOutput.attachAnsiConsole(outputStream);
 }
 public void removeAllOutputEventListeners() {
   loggingOutput.removeAllOutputEventListeners();
 }
 public void removeOutputEventListener(OutputEventListener listener) {
   if (outputEventListeners.remove(listener) && started) {
     loggingOutput.removeOutputEventListener(listener);
   }
 }
 public void addOutputEventListener(OutputEventListener listener) {
   if (outputEventListeners.add(listener) && started) {
     loggingOutput.addOutputEventListener(listener);
   }
 }
 public void removeStandardErrorListener(StandardOutputListener listener) {
   if (stderrListeners.remove(listener) && started) {
     loggingOutput.removeStandardErrorListener(listener);
   }
 }
 public void addStandardErrorListener(StandardOutputListener listener) {
   if (stderrListeners.add(listener) && started) {
     loggingOutput.addStandardErrorListener(listener);
   }
 }