是否有一种简单的方法可以让Ant记录器(默认或其他)添加 每条消息的时间戳?
我能想到的唯一方法就是使用 Log4jListener并将其设置包括时间戳。或写一个 自定义记录器,它是DefaultLogger的子类并写入时间戳。 如果有更好或更简单的方法(最好不要求那样) 用户将新的jar文件安装到他们的Ant lib目录中,
我有兴趣听到它。
答案 0 :(得分:10)
鉴于属性在ant中是不可变的,你需要做一些有点时髦的事情,否则你最终会一次又一次地记录相同的时间戳。
使用antcall会为您提供一个全新的会话,这意味着您可以重复使用该属性,尽管它有点笨拙。
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<antcall target="_timestamp.echo">
<param name="message" value="@{message}" />
</antcall>
</sequential>
</macrodef>
<target name="_timestamp.echo">
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} ${message}"/>
</target>
如果您使用的是Ant 1.8,那么您可以使用更清晰的本地
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<local name="current.time" />
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} @{message}" />
</sequential>
</macrodef>
以下是如何使用它
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>
答案 1 :(得分:7)
试试这个
ant -logger org.apache.tools.ant.listener.ProfileLogger
它打印每个目标的进入时间和退出时间以及每个目标所用的时间(毫秒)。
答案 2 :(得分:6)
您可以定义一个Ant宏定义来设置当前时间戳,然后每次需要在整个build.xml中引用它时调用macrodef
以下macrodef将时间戳设置为属性(如果要自定义其设置的属性,可以向macrodef添加属性):
<macrodef name="set.timestamp">
<sequential>
<tstamp>
<format property="current.time" pattern="MM/dd/yyyy hh:mm"/>
</tstamp>
</sequential>
</macrodef>
然后使用它,只需根据需要访问macrodef设置的属性:
<target name="doFoo" depends="dir.check" if="dir.exists">
<set.timestamp/>
<!--in this example, just echo the timestamp -->
<echo message="${current.time}"/>
</target>
有关ant macrodef的更多信息,请查看documentation。
答案 3 :(得分:3)
我喜欢macrodef解决方案,如果它确实比目标解决方案更有效,但我使用“var unset = true”强制重置变量,如:
<macrodef name="echoTimestamp">
<sequential>
<var name="current.time" unset="true"/>
<tstamp>
<format property="current.time" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<echo message="${current.time}" />
</sequential>
</macrodef> <!-- end echoTimestamp -->
使用
<echoTimestamp />
<sleep seconds="3"/>
<echoTimestamp />
答案 4 :(得分:1)
看看这些记录器:http://ant.apache.org/manual/listeners.html(也是一个 - org.apache.tools.ant.listener.ProfileLogger - 在我之前的答案中提到)。但这似乎需要一个足够新的Ant版本。