我们如何将Java程序控制台输出redirect到多个文件?

我们如何将eclipse控制台输出redirect到一个文件? 我可以:

  1. Run Configuration – > Commons – > Select a file
  2. 使用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