Java重定向System.out和System.err
继承PrintStream类:
public
class
TeeStream
extends
PrintStream{
PrintStreamout;
public TeeStream(PrintStreamout1,PrintStreamout2){
super (out1);
this .out = out2;
}
public void write( byte buf[], int off, int len){
try {
super .write(buf,off,len);
out.write(buf,off,len);
} catch (Exceptione){
}
}
public void flush(){
super .flush();
out.flush();
}
}
PrintStreamout;
public TeeStream(PrintStreamout1,PrintStreamout2){
super (out1);
this .out = out2;
}
public void write( byte buf[], int off, int len){
try {
super .write(buf,off,len);
out.write(buf,off,len);
} catch (Exceptione){
}
}
public void flush(){
super .flush();
out.flush();
}
}
使用示例:
try
{
PrintStreamout = new PrintStream( new FileOutputStream( " out.log " ));
PrintStreamtee = new TeeStream(System.out,out);
System.setOut(tee);
PrintStreamerr = new PrintStream( new FileOutputStream( " err.log " ));
tee = new TeeStream(System.err,err);
System.setErr(tee);
} catch (FileNotFoundExceptione){
}
System.out.println( " welcome " );
System.err.println( " error " );
PrintStreamout = new PrintStream( new FileOutputStream( " out.log " ));
PrintStreamtee = new TeeStream(System.out,out);
System.setOut(tee);
PrintStreamerr = new PrintStream( new FileOutputStream( " err.log " ));
tee = new TeeStream(System.err,err);
System.setErr(tee);
} catch (FileNotFoundExceptione){
}
System.out.println( " welcome " );
System.err.println( " error " );