有没有一种方法可以逐行捕获我的Java程序的stdout和stderror?Java:将stdout和stderr编程到某种处理程序
也许类似于您使用addHandler
向记录器实例添加处理程序的方式。
编辑:我不想更换默认处理程序 - 我仍然需要输出显示在命令行上。
有没有一种方法可以逐行捕获我的Java程序的stdout和stderror?Java:将stdout和stderr编程到某种处理程序
也许类似于您使用addHandler
向记录器实例添加处理程序的方式。
编辑:我不想更换默认处理程序 - 我仍然需要输出显示在命令行上。
通过使用System.setOut()和System.setErr()您可以将标准输出和错误流设置为任何PrintStream并捕获所有内容。
此外: 我不知道是否存在任何优雅的方式来做到这一点,但这样做的一个方法是:
1.保存默认的输出流
的PrintStream defaultOut = System.out的;
(System.getOut()虽然会很有趣)
2.将System.out重定向到您想要的打印流(例如任何文件)
3.不要使用System.out.println()函数,它的确如下:
print(Object o){
defaultOut.println(o); //假设defaultOut在这个函数中是可见的
System.out.println(o); }
的方法System.setOut
和System.setErr
允许您更改PrintStream
对象的System.out
和System.err
变量参考。您可以使用它们将捕获输出的对象替换为默认的对象,或者使用它来执行任何您想要的操作。
随访
我不想更换PrintStreams,因为我还需要输出去命令行。
您的代码可以照顾的是:
OutputStream
一个子类,它会将所有输出到另一个OutputStream
实例,还捕获输出。使“其他”实例成为一个构造参数。System.out
和System.err
。System.out
和System.err
值分别作为构造函数参数。PrintStream
实例。System.setOut
和System.setErr
将System.out
和System.err
替换为PrintStream
实例。我迟了13秒:( – 2010-11-25 02:55:13
Message Console允许您在文本窗格中显示输出并将其显示在命令行上。
要求是什么原因?如果是用于日志记录或调试,则应考虑使用日志记录框架而不是stderr和stdout。如果你使用的是* nix系统,你可以将stdout和stderr重定向到一个文件中并拖拽文件... – beggs 2010-11-25 03:19:55
我正在编写一个流API,您可以在其中获得该程序的控制台输出。所以无论进入控制台还可以将其视为一个http流。 – 2010-11-25 03:33:01