[轉]將java的console日誌寫入文件

FileOutputStream bos = new FileOutputStream("output.txt");
System.setOut(new PrintStream(bos));
System.out.println("output to output.txt");
這樣,console的輸出全部寫入文件output.txt,但是控制檯不會有輸出信息。
如果希望控制檯也有輸出:
新建一個繼承java.io.OutputStream的類,實現多輸出方式
import java.io.IOException;
import java.io.OutputStream;
public class MultiOutputStream extends OutputStream {
 OutputStream outputStream1,outputStream2;
 public MultiOutputStream(OutputStream stream1, OutputStream stream2 ) 
 throws IOException{
  outputStream1 = stream1;
  outputStream2 = stream2;
 }
 @Override
 public void write(int b) throws IOException {
  // TODO Auto-generated method stub
  outputStream1.write(b);
  outputStream2.write(b);
 }
}
再調用該類的對象
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
class Out2File {
 /**
  * @param args
  * @throws IOException 
  */
 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  
  PrintStream oldPrintStream = System.out;
  FileOutputStream bos = new FileOutputStream("output.txt");
  MultiOutputStream multi = new MultiOutputStream(new PrintStream(bos),oldPrintStream);
  System.setOut(new PrintStream(multi));
  System.out.println("test");
  
 }
}


這樣console和文件中都會有輸出 

1、要解決console和文件同時輸出的問題還需要自己實現一個OutputStream,讓OutputStream能同時寫入多個輸出.
       首先繼承java.io.OutputStream,然後實現public abstract void write(int b) throws IOException; 並且覆寫java.io.OutputStream中的其他的方法,具體的實現方式按照自己的需求來做,這裏就不做出具體的實現了.
       通過實現自己實現OutputStream之後,
      在
           PrintStream printStreamOut = new PrintStream(outputStreamOut);
           PrintStream printStreamErr = new PrintStream(outputStreamErr);
      中分別把outputStreamOut和outputStreamErr對象換成自己實現的OutputStream對象,這樣就可以實現在一個OutputStream對象中進行多個輸出操作.
      按照以上的思路進行的實現,可以完全把控制檯的所有的輸出寫入到日誌文件中,包括System.out.println這樣的輸出.
ref:http://jianshusoft.blog.51cto.com/2380869/769913

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章