Java:将 stdout 和 stderr 编程为某种处理程序
有没有办法逐行捕获我的Java程序的stdout和stderror?
也许类似于使用 addHandler
将处理程序添加到 Logger 实例的方式。
编辑:我不想替换默认处理程序 - 我仍然需要输出显示在命令行上。
Is there a way to capture the stdout and stderror of my Java program line by line?
Perhaps something similar to the way you can add a handler to a Logger instance using addHandler
.
edit: I don't want to replace the default handlers--I still need the output to show up on the command line.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通过使用 系统.setOut() 和 System.setErr() 您可以将标准输出和错误流设置为任何 PrintStream,并捕获所有内容。
添加:
我不知道是否存在任何优雅的方法来做到这一点,但一种方法是:
1.保存默认输出流
PrintStream defaultOut = System.out;
(System.getOut() 会很有趣)
2. 将 System.out 重定向到您想要的打印流(例如任何文件)
3. 不要使用 System.out.println(),而是使用打印函数,该函数执行以下操作:
打印(对象o){
defaultOut.println(o);//假设defaultOut在此函数中可见
System.out.println(o);
}
By using System.setOut() and System.setErr() you can set standard output and error stream to any PrintStream, and capture everything.
ADDITION:
I don't know if there exist any elegant way to do this, but one way to do so is:
1. Save default output stream
PrintStream defaultOut = System.out;
(System.getOut() would be fun to have though)
2. Redirect System.out to the printstream you want (e.g. any file)
3. Instead of using System.out.println() use your print function, which does following:
print(Object o){
defaultOut.println(o);//Assuming that defaultOut is visible in this function
System.out.println(o);
}
System.setOut
和System.setErr
方法允许您更改System.out
和PrintStream
对象System.err
变量引用。您可以使用它们将默认的PrintStream
对象替换为捕获输出的对象,或者对其执行任何您想要的操作。跟进
您的代码可以处理此问题:
OutputStream
的子类,将所有输出写入另一个OutputStream
实例,并捕获输出。使“其他”实例成为构造函数参数。System.out
和System.err
的当前值。System.out
和System.err
值作为构造函数参数。System.setOut
和System.setErr
将System.out
和System.err
替换为PrintStream
实例。The methods
System.setOut
andSystem.setErr
allow you to change thePrintStream
objects that theSystem.out
andSystem.err
variables refer to. You can use them to replace the defaultPrintStream
objects with objects that capture output, or do whatever you want with it.FOLLOWUP
Your code can take care of that:
OutputStream
that writes all output to anotherOutputStream
instance, and also captures the output. Make the "other" instance a constructort parameter.System.out
andSystem.err
.System.out
andSystem.err
values as constructor parameters respectively.PrintStream
instances.System.setOut
andSystem.setErr
to replaceSystem.out
andSystem.err
with thePrintStream
instances.消息控制台允许您在文本窗格中显示输出并显示它在命令行上。
The Message Console allows you to display output in a text pane and display it on the command line.