Capture Logs

Q: How do I capture logs for all targets

   A common requirement when running an Ant target is to capture any logged output.

 1: <macrodef name="postwrap">
 2:   <sequential>
 3:     <unassign var="${$x:target}.incomplete"/>
 4:     <unassign var="${$x:target}.check.result"/>
 5:   </sequential>
 6: </macrodef>
 7:
 8: <macrodef name="prewrap">
 9:   <attribute name="log-d"/>
10:   <sequential>
11:     <postwrap/>
12:     <delete quiet="yes" file="@{log-d}/${$x:target}.status"/>
13:   </sequential>
14: </macrodef>

The main “wrap” macro definition is shown below.

 1: <macrodef name="wrap">
 2:   <attribute name="body"/>
 3:   <attribute name="log-d" default="${logs.d}"/>
 4:   <sequential>
 5:     <assert ismacro="@{body}" message="Macro '@{body}' exists"/>
 6:     <prewrap log-d="@{log-d}"/>
 7:     <capturelogs splitentries="yes">
 8:       <protect>
 9:           <callinline macro="@{body}"/>                       <!-- do the wrapped task(s) -->
10:           <iferror quiet="true" failvariable="${$x:target}.incomplete">
11:             <show message="FAIL"
12:               tofile="@{log-d}/${$x:target}.status"/>         <!-- capture even if aborts -->
13:           </iferror>
14:           <always>
15:             <copylogged tofile="@{log-d}/${$x:target}.log"/>  <!-- save all logged output -->
16:             <do false="${$isset:${$x:target}.incomplete?v}">
17:               <interpretlogged prefix="${$x:target}.check."
18:                     interpreter="anyerror-checker"/>          <!-- check output for issue -->
19:               <domatch var="${$x:target}.check.result">
20:                 <equals value="clean"/>
21:                 <otherwise>
22:                   <show message="WARN"
23:                     tofile="@{log-d}/${$x:target}.status"/>   <!-- save record of issues -->
24:                 </otherwise>
25:               </domatch>
26:             </do>
27:             <postwrap/>                                       <!-- always clean-up -->
28:           </always>
29:       </protect>
30:     </capturelogs>
31:   </sequential>
32: </macrodef>

Related Tips


Navigation
Personal Tools