[转]将java的console日志写入文件

来源:互联网 发布:mac os iso镜像 编辑:程序博客网 时间:2024/06/03 14:44
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

0 0
原创粉丝点击