开发者

Log4j hanging my application

Im trying to get console output from an external application in my application. When i call the externall app from my code it hangs with the message:

Configuring logging...

Configuring log4j from: C:\GPAT\log4j.cfg

and nothing happens. I searched through internet and it seems that it might be thread issue. But i cant modify this external application and i must go through log4j. I read the external app like this:

StringBuffer output = new StringBuffer();

    try {
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(GSATCommand);
        BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        System.out.println("Test running...");
        String line = null;
        while ((l开发者_Go百科ine = input.readLine()) != null) {
            System.out.println(line);   // Writes the test output to console
            output.append(line);  output.append("\n");
        }
        int exitVal = proc.waitFor();
        System.out.println("Process exitValue: " + exitVal);
        System.out.println("Test successfully executed");
    } catch (Throwable t) {
        t.printStackTrace();
    }

Thanks for reading.


You need to consume both stdout and stderr from a spawned process in separate threads, to prevent blocking behaviour (your spawned process will write to buffers, and block if those buffers aren't being emptied by your consuming process).

See the 2nd paragraph of this answer for more details and a link to a suitable fix.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜