我们如何将Java程序控制台输出redirect到多个文件?
我们如何将eclipse控制台输出redirect到一个文件? 我可以:
-
Run Configuration
– >Commons
– >Select a file
。 - 使用
System.setOut(PrintStream)
和System.setErr(PrintStream)
。
1)的问题是我需要将控制台输出logging到不同的文件而不是一个文件。
2)的问题是它只存储由System.out.println()
生成的控制台输出或抛出exception的堆栈跟踪。 它不捕获其他types的输出,如log4j警告等。
我们如何以编程方式将控制台输出redirect到不同的文件?
selectRun Configurations
– > Common
然后在标准input和输出中,您也可以select一个文件。
您可以在输出文件名中使用“variables”,例如:
/tmp/FetchBlock-${current_date}.txt
当前date:
返回格式为yyyyMMdd_HHmm的当前系统时间。 可选的参数可以用来提供替代格式。 参数必须是java.util.SimpleDateFormat的有效模式。
或者你也可以使用system_property或者env_var来指定dynamic的东西(或者需要指定为参数)
您可以通过执行以编程方式设置System.out的输出:
System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));
编辑:
由于这个解决scheme基于PrintStream
,所以我们可以启用autoFlush,但根据文档 :
autoFlush – 一个布尔值; 如果为true,则每当写入一个字节数组时,都会刷新输出缓冲区,调用其中一个println方法,或者写入换行符或字节('\ n')
因此,如果没有写入新行,请记住手动inputSystem.out.flush()
。
(感谢Robert Tupelo-Schneck)
我们可以通过下面的方式来设置System类的variables
System.setOut(新的PrintStream(新的FileOutputStream(“输出文件的path”)))。 此外,您需要closures或刷新'out'(System.out.close()或System.out.flush())variables,以便最终不会丢失一些输出。
资料来源: http : //xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html