捕获控制台的所有输出信息

来源:百度文库 编辑:神马文学网 时间:2024/05/27 08:27:12
一般情况下,在记录日志时,只能把通过API进行记录的信息写入自定义的日志文件,其余的信息就无法被写入了.
解决的办法就是重写System.out和System.err,让System.out,System.err的写入转向到你的日志文件,这样只要在控制台的所有的输出信息都会被记录到日志文件中.
例如可以在系统进行初始化时进行这样的操作:
重写System.out :
PrintStream printStreamOut = new PrintStream(outputStreamOut);
System.setOut(printStreamOut);
重写System.err
PrintStream printStreamErr = new PrintStream(outputStreamErr);
System.setErr(printStreamErr);
这里的outputStreamOut,和outputStreamErr都是自定义的重定向的日志文件的OutputStream
现在重定向输出的问题解决了,可以又出现了一个新的问题: 在控制台上看不到任何输出信息,输出的信息全部被定向到日志文件中.
要解决这个问题还需要自己实现一个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这样的输出.
snoics