Отметки времени в журнале Ant? - PullRequest
11 голосов
/ 07 августа 2009

Есть ли простой способ заставить Ant logger (по умолчанию или другое) добавить метка времени для каждого сообщения?

Единственный способ, которым я могу думать, - это использовать Log4jListener и его настройки включают метку времени. Или напишите Пользовательский регистратор, который подклассов DefaultLogger и записывает метку времени. Если есть лучший или более простой способ (желательно без пользователи устанавливают новый jar-файл в каталог Ant lib),

Мне было бы интересно услышать об этом.

Ответы [ 5 ]

10 голосов
/ 04 июня 2010

С учетом того, что свойства являются неизменяемыми в 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, вы можете использовать local, который намного чище

<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>
7 голосов
/ 15 марта 2011

Попробуйте это

ant -logger org.apache.tools.ant.listener.ProfileLogger

Он печатает время входа и выхода для каждой цели вместе со временем, затраченным на каждую цель в мс.

6 голосов
/ 07 августа 2009

Вы можете определить макроопределение Ant, чтобы установить текущую временную метку, а затем вызывать макроопределение каждый раз, когда вам нужно ссылаться на него в вашем build.xml

Следующий макрос определит метку времени для свойства (вы можете добавить атрибут в макрос, если хотите настроить свойство, которое он устанавливает):

<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 смотрите документацию .

3 голосов
/ 26 сентября 2012

Мне нравится решение 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 />
1 голос
/ 29 ноября 2011

Посмотрите на эти регистраторы: http://ant.apache.org/manual/listeners.html (также один - org.apache.tools.ant.listener.ProfileLogger - упомянут в ответе перед моим) Но для этого требуется новая версия Ant.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...