Location: JWare Software » AntXtras » Documents » How Tos » Capture Logs
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>