[转]将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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值