我正在运行Ant并将输出提供给日志文件:
ant -logfile file.txt target-name
我还想将一些简单的进度信息打印到控制台。答案似乎是一个BuildEvent侦听器,每次命中新目标时都会写入控制台,但文档明确指出:
侦听器不能直接访问System.out和System.err,因为这些流上的输出被Ant的核心重定向到构建事件系统。
我错过了什么吗?有没有办法做到这一点?
答案 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点可能对其他有类似问题的人有用:
java.lang.System
执行的操作非常类似于首先设置System.out
和System.err
。所有这些让我对这种方法更有信心。