Ant输出到2个不同的来源?

时间:2009-11-24 07:10:47

标签: ant

我正在运行Ant并将输出提供给日志文件:

ant -logfile file.txt target-name

我还想将一些简单的进度信息打印到控制台。答案似乎是一个BuildEvent侦听器,每次命中新目标时都会写入控制台,但文档明确指出:

  

侦听器不能直接访问System.out和System.err,因为这些流上的输出被Ant的核心重定向到构建事件系统。

我错过了什么吗?有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

实际上,答案是Log4jListener

有一个示例log4j配置,用于登录上面链接中显示的控制台和文件。然后,您可以使用<echo> task和适当的level参数来有选择地决定打印到控制台的内容。

答案 1 :(得分:3)

Ant取代了System.out&amp; System.err流重新映射通过它自己的日志记录系统打印的消息。

也就是说,您仍然可以使用java.io.FileDescriptor #out

访问ACTUAL OS流。

答案 2 :(得分:1)

感谢您的回答!我很慢,但这个 仍然是我想要做的事。

我设法使用carej建议的方法使用java.io.FileDescriptor #out stream和一个像这样的Ant scriptdef来获得或多或少的工作:

<scriptdef name="progress-text" language="javascript" >
  output = new java.io.PrintStream(new java.io.FileOutputStream(java.io.FileDescriptor.err))
  output.println(self.text)
</scriptdef>

现在我只是想知道 wize 这种方法是怎么回事?是否存在直接使用底层操作系统流的风险?


修改 2点可能对其他有类似问题的人有用:

  1. 本文对Ant I / O系统有很好的描述:http://codefeed.com/blog/?p=68
  2. java.lang.System执行的操作非常类似于首先设置System.outSystem.err
  3. 所有这些让我对这种方法更有信心。