7

我正在使用 ant 启动 Java 程序。

在程序终止后,我不想“松开”输出。所以我使用属性' output'将输出存储在一个文件中。

<java classname="..." fork="true" output="....txt">

不幸的是,我不再有任何控制台输出。在控制台和txt 文件中输出输出的好方法是什么。

我正在寻找替代方案

ant mytast > myFile.txt

因为我不希望“用户”必须使用外壳重定向“> ..”。. 如果他/她不选择重定向,则输出将丢失。

4

3 回答 3

8

Ant 有办法记录输出。http://ant.apache.org/manual/Tasks/recorder.html

记录器是当前构建过程的侦听器,将输出记录到文件中。

可以同时存在多个记录器。每个记录器都与一个文件相关联。文件名用作记录器的唯一标识符。第一次使用未使用的文件名调用记录器任务将创建一个记录器(使用提供的参数)并将其添加到构建的侦听器中。使用此文件名对记录器任务的所有后续调用都将修改该记录器状态(是否记录)或其他属性(如日志记录级别)。

看起来满足你的需要。

    <compile >
        <record name="log.txt" action="start"/>
        <javac ...
        <record name="log.txt" action="stop"/>
    <compile/>
于 2012-04-12T14:46:14.263 回答
1

如果程序写入一个文件描述符(例如标准输出),您可以将其仅重定向到一个位置(因此要么是控制台,要么是文件,而不是两者)。

要实现多重重定向,您有两种选择:

  • 使用外部方法复制该文件描述符(例如 tee 命令正是这样做的——即使对于 Windows 也有实现:请参见此处此处
  • 将相同的信息从java程序中写入两个不同的输出(例如标准输出和标准错误),然后您可以使用传统方式重定向一个,另一个转到控制台

我不推荐第二种方法,因为它会使您的代码变得混乱,并且您通常无法完全控制所写的标准错误(想想对 3rd 方函数的调用)。

于 2012-04-12T10:49:32.697 回答
0

您可以使用记录任务。我认为这将满足您的需求。

https://ant.apache.org/manual/Tasks/recorder.html

于 2017-02-08T07:19:02.670 回答