輸出我已經有使用log4j的寫在控制檯輸出的Java程序,而現在我想用另一個Java程序調用的第一個(子過程),並攔截其輸出。 我使用的方法在http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4這個頁面,部分代碼如下圖所示如何攔截子進程的父進程
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>
我可以輸出消息,而只是在「run.bat中」使用呼應XXX,而不是log4j的生成的消息。如果我跑「的run.bat」,我可以看到無論是在控制檯輸出。有沒有辦法,我也可以得到父進程log4j的輸出?謝謝。
非常感謝血管,對不起,我作出這樣一個愚蠢的錯誤:P – daniel
Yould驚訝有多少人犯類似的錯誤。看看我上面的編輯如何避免它。 –