2009-08-07 8 views
10

¿Hay alguna manera fácil de tener el registrador Ant (predeterminado u otro) para agregar una marca de tiempo a cada mensaje?Indicaciones de fecha y hora en Ant log?

La única forma en que puedo pensar es usar el Log4jListener y hacer que su configuración incluya la marca de tiempo. O escriba un registrador personalizado que subclasifica DefaultLogger y escribe la marca de tiempo. Si hay una manera mejor o más fácil (preferiblemente sin requerir que los usuarios de instalen un nuevo archivo jar en su directorio Ant lib),

Me interesaría saber al respecto.

Respuesta

6

Puede definir un macrodef Ant para establecer la fecha y hora actual, a continuación, llamar a la macrodef cada vez que necesite hacer referencia a ella a través de su build.xml

La siguiente macrodef fijará la fecha y hora a una propiedad (se puede añadir un atributo a la macrodef si desea personalizar la propiedad se establece):

<macrodef name="set.timestamp"> 
    <sequential> 
    <tstamp> 
     <format property="current.time" pattern="MM/dd/yyyy hh:mm"/> 
    </tstamp> 
    </sequential> 
</macrodef> 

Luego de usarlo, simplemente acceder a la propiedad establecido por el macrodef como sea necesario:

<target name="doFoo" depends="dir.check" if="dir.exists"> 
    <set.timestamp/> 
    <!--in this example, just echo the timestamp --> 
    <echo message="${current.time}"/> 
</target> 

Para obtener más información sobre macrodefs de hormigas, consulte documentation.

+3

Esto almacenará la marca de tiempo en una propiedad, por lo que todos los mensajes compartirán el mismo tiempo. Bueno en algunos casos, pero inútil para, p. ver qué parte de una construcción lleva demasiado tiempo.Como el OP menciona "una marca de tiempo para cada mensaje", en realidad no creo que esta sea una respuesta correcta a la pregunta intencionada. –

+1

No estoy tan seguro de ese Rasmus. Si llama repetidamente a la macro de marca de tiempo configurada e inmediatamente después de que se vacíe la hora, debería volcarla apropiadamente. – corsiKa

10

Las propiedades dadas son inmutables en la hormiga que necesitas para hacer algo un poco funky, de lo contrario acabas de registrar la misma marca de tiempo una y otra vez.

El uso de antcall le da una nueva sesión, lo que significa que puede reutilizar la propiedad, aunque es un poco torpe.

<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> 

Si está utilizando Ant 1.8 a continuación, se puede utilizar local, que es mucho más limpio

<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> 

Y aquí es cómo se puede usar

<target name="testTsEcho" depends="init" description="blah"> 
    <timestamp.echo message="test" /> 
    <sleep seconds="10" /> 
    <timestamp.echo message="test2" /> 
</target> 
7

Prueba este

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

Imprime el tiempo de entrada y el tiempo de salida para cada objetivo junto con el tiempo necesario para cada objetivo en ms.

3

me gusta la solución macrodef si es que es más eficiente que el de destino, pero yo uso un "var desarmar = true" para forzar un reajuste de la variable, como:

<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 --> 

uso

<echoTimestamp /> 
<sleep seconds="3"/> 
<echoTimestamp />