如何将 Java 程序控制台输出重定向到多个文件?

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

  1. - > Commons-> Select a file.
  2. 使用 System.setOut(PrintStream)System.setErr(PrintStream)

与1)的问题是,我需要记录控制台输出到不同的文件,而不是一个文件。

2的问题在于它只存储由 System.out.println()生成的控制台输出或引发的异常的堆栈跟踪。它不捕获其他类型的输出,例如 log4j 警告等。

如何以编程方式将控制台输出重定向到不同的文件?

154177 次浏览

转到 run as 并选择 Run Configurations-> Common,在标准输入和输出中也可以选择 File。

您可以通过以下步骤以编程方式设置 System.out 的输出:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

编辑:

由于这个解决方案是基于一个 PrintStream,我们可以启用 autoFlush,但根据 医生:

AutoFlush-一个布尔值; 如果为 true,则将刷新输出缓冲区 每当写入字节数组时,println 方法之一是 调用,或者写入换行符或字节(’n’)

因此,如果没有写入新行,请记住手动使用 System.out.flush()

(感谢 Robert Tupelo-Schneck)

您可以在输出文件名中使用一个“变量”,例如:

/tmp/FetchBlock-${current_date}.txt

当前 _ 日期:

返回格式为 yyyMMdd _ HHM 的当前系统时间。可选参数可用于提供替代格式设置。参数必须是 java.util 的有效模式。SimpleDateFormat.

或者您也可以使用 system _ property 或 env _ var 来指定一些动态的东西(任何一个都需要指定为参数)

我们可以通过以下方式设置 System 类的变量来实现这一点

SetOut (new PrintStream (new FileOutputStream (“ Path to output file”)))。此外,还需要关闭或清除‘ out’(System.out.close ()或 System.out.rush ())变量,以免最终丢失某些输出。

资料来源: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

为了解决这个问题,我使用 ${ string _ timp }变量。 它在应用程序运行时显示一个输入对话框。我可以在该对话框中手动设置日期/时间。

  1. 移动文件路径末尾的光标。 enter image description here

  2. 单击变量并选择 < strong > string _ tip enter image description here

  3. 选择“应用”并运行 enter image description here enter image description here