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

Ali*_*hah 160 java eclipse

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

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

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

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

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

She*_*ari 175

转到运行方式并选择Run Configurations- > Common,在标准输入和输出中,您也可以选择文件.

  • 我发现40个人从问题的第二行投了一份复制粘贴,这绝对是一件非常热闹的事. (105认同)
  • @AnthonyW我认为这主要是因为人们在这里被标题问题所引导,即"如何将eclipse输出重定向到文件".这个答案实际上是标题问题的答案. (13认同)
  • 什么?仔细阅读提问者的问题时,这个答案是不正确的。 (2认同)

小智 11

您可以在输出文件名中使用"变量",例如:

/tmp/FetchBlock-${current_date}.txt
Run Code Online (Sandbox Code Playgroud)

当前的日期:

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

或者您也可以使用system_property或env_var来指定动态(需要将其指定为参数)


Ian*_*edv 8

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

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));
Run Code Online (Sandbox Code Playgroud)

编辑:

由于此解决方案基于a PrintStream,我们可以启用autoFlush,但根据文档:

autoFlush - 布尔值; 如果为true,则只要写入字节数组,调用其中一个println方法,或者写入换行符或字节('\n'),就会刷新输出缓冲区

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

(谢谢Robert Tupelo-Schneck)