分享

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

 达能牛牛 2006-05-16
一般情况下,在记录日志时,只能把通过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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多