44import java .util .Collections ;
55import java .util .List ;
66import java .util .concurrent .Executor ;
7+ import java .util .logging .Level ;
78import java .util .logging .Logger ;
89
910/**
1011 * Consumes stdout and stderr of a process asynchronously.
1112 */
12- class ProcessOutputConsumer <T > {
13+ final class ProcessOutputConsumer <T > {
14+ private static final String STD_ERR_NAME = "stdErr" ;
15+ private static final String STD_OUT_NAME = "stdOut" ;
1316 private static final Logger LOG = Logger .getLogger (ProcessOutputConsumer .class .getName ());
1417 private final Executor executor ;
1518 private final Process process ;
@@ -18,7 +21,7 @@ class ProcessOutputConsumer<T> {
1821 private final StreamCollector <T > stdOutCollector ;
1922 private final StreamCollector <T > stdErrCollector ;
2023
21- ProcessOutputConsumer (final Executor executor , final Process process ,
24+ private ProcessOutputConsumer (final Executor executor , final Process process ,
2225 final List <Runnable > consumers , final List <StreamCloseWaiter > streamCloseWaiter ,
2326 final StreamCollector <T > stdOutCollector , final StreamCollector <T > stdErrCollector ) {
2427 this .executor = executor ;
@@ -30,15 +33,17 @@ class ProcessOutputConsumer<T> {
3033 }
3134
3235 static <T > ProcessOutputConsumer <T > create (final Executor executor , final Process process ,
33- final Duration streamCloseTimeout , final StreamCollector <T > stdOutCollector ,
36+ final Duration streamCloseTimeout , Level logLevel , final StreamCollector <T > stdOutCollector ,
3437 final StreamCollector <T > stdErrCollector ) {
3538 final long pid = process .pid ();
36- final StreamCloseWaiter stdOutCloseWaiter = new StreamCloseWaiter ("stdOut" , pid , streamCloseTimeout );
37- final StreamCloseWaiter stdErrCloseWaiter = new StreamCloseWaiter ("stdErr" , pid , streamCloseTimeout );
38- final AsyncStreamConsumer stdOutConsumer = new AsyncStreamConsumer ("stdout" , pid , process .getInputStream (),
39- new DelegatingConsumer (List .of (stdOutCloseWaiter , stdOutCollector )));
40- final AsyncStreamConsumer stdErrConsumer = new AsyncStreamConsumer ("stderr" , pid , process .getErrorStream (),
41- new DelegatingConsumer (List .of (stdErrCloseWaiter , stdErrCollector )));
39+ final StreamCloseWaiter stdOutCloseWaiter = new StreamCloseWaiter (STD_OUT_NAME , pid , streamCloseTimeout );
40+ final StreamCloseWaiter stdErrCloseWaiter = new StreamCloseWaiter (STD_ERR_NAME , pid , streamCloseTimeout );
41+ final AsyncStreamConsumer stdOutConsumer = new AsyncStreamConsumer (STD_OUT_NAME , pid , process .getInputStream (),
42+ new DelegatingConsumer (
43+ List .of (stdOutCloseWaiter , stdOutCollector , new StreamLogger (pid , STD_OUT_NAME , logLevel ))));
44+ final AsyncStreamConsumer stdErrConsumer = new AsyncStreamConsumer (STD_ERR_NAME , pid , process .getErrorStream (),
45+ new DelegatingConsumer (
46+ List .of (stdErrCloseWaiter , stdErrCollector , new StreamLogger (pid , STD_ERR_NAME , logLevel ))));
4247 return new ProcessOutputConsumer <>(executor , process , List .of (stdOutConsumer , stdErrConsumer ),
4348 List .of (stdOutCloseWaiter , stdErrCloseWaiter ), stdOutCollector , stdErrCollector );
4449 }
0 commit comments