Cómo interceptar la salida del subproceso en el proceso padre

Ya tengo un programa Java que usa log4j para escribir la salida en la consola, mientras que ahora quiero usar otro programa Java para invocar al primero (subproceso) e interceptar su salida. Yo uso el método en esta página http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 , algunos códigos como a continuación

class StreamRedirector extends Thread
{
InputStream is;

StreamRedirector(InputStream is)
{
    this.is = is;
}

public void run()
{
    try
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line=null;
        while ( (line = br.readLine()) != null)
        {
            System.out.println(line);
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}
}
.............
try
    {
        Process p = Runtime.getRuntime().exec("run.bat");

        StreamRedirector errSR = new StreamRedirector(p.getErrorStream());

        StreamRedirector outSR = new StreamRedirector(p.getInputStream());

        errSR.run();
        outSR.run();

        int exitVal = p.waitFor();
        System.out.println("Exit Value: " + exitVal);
    }

log4j config:
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">

    <param name="Target" value="System.out" />

    <layout class="org.apache.log4j.PatternLayout">

        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p  [%t] [%c{1}] %m%n" />
    </layout>
</appender>

Puedo obtener el mensaje de salida, pero solo en "run.bat" usando echo XXX , no el mensaje generado por log4j. Si ejecuto "run.bat", puedo ver tanto el resultado en la consola. ¿Hay alguna manera de que también pueda obtener la salida log4j en el proceso primario? Gracias.

Respuesta 1

Entonces lo siguiente: char x = 88; int número = 8 + 'E'; char x = 'a' + 8; ¿son correctas las operaciones legales de Java? Porque mi profesor de Java dice que SOLO los caracteres encerrados entre comillas simples son legales ...

Tiene dos hashmaps HM1 y HM2 donde key = Id (long) value = timestamp. Debe proporcionar un programa para que devuelva una lista de ID combinados de ambos hashmaps de modo que se ordenen según su ...

En esta respuesta hay una recomendación "Use un analizador y escritor SAX (o StAX) al mismo tiempo". Según tengo entendido, debería combinar, por ejemplo, un org.xml.sax.XMLReader con algún escritor XML, mi problema ...

Estoy trabajando en una aplicación web que tiene que usar diferentes dominios para acceder a través de http y https. Ahora me enfrento al siguiente problema: mientras el usuario accede al dominio http, alguna información ...