aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/manual/listeners.html
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/manual/listeners.html')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/manual/listeners.html623
1 files changed, 623 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/manual/listeners.html b/framework/src/ant/apache-ant-1.9.6/manual/listeners.html
new file mode 100644
index 00000000..2015cd52
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/manual/listeners.html
@@ -0,0 +1,623 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<link rel="stylesheet" type="text/css" href="stylesheets/style.css">
+<title>Listeners &amp; Loggers</title>
+</head>
+
+<body>
+<h1>Listeners &amp; Loggers</h1>
+
+<h2><a name="Overview">Overview</a></h2>
+
+<p>Apache Ant has two related features to allow the build process to be monitored:
+listeners and loggers.</p>
+
+<h3><a name="Listeners">Listeners</a></h3>
+
+<p>A listener is alerted of the following events:</p>
+
+<ul>
+ <li>build started</li>
+ <li>build finished</li>
+ <li>target started</li>
+ <li>target finished</li>
+ <li>task started</li>
+ <li>task finished</li>
+ <li>message logged</li>
+</ul>
+
+<p>
+ These are used internally for various recording and housekeeping operations,
+ however new listeners may registered on the command line through the <code>-listener</code>
+ argument.
+</p>
+
+<h3><a name="Loggers">Loggers</a></h3>
+
+<p>Loggers extend the capabilities of listeners and add the following features:</p>
+
+<ul>
+ <li>Receives a handle to the standard output and error print streams and
+ therefore can log information to the console or the <code>-logfile</code> specified file.</li>
+ <li>Logging level (-quiet, -verbose, -debug) aware</li>
+ <li>Emacs-mode aware</li>
+</ul>
+
+<h2><a name="builtin">Built-in Listeners/Loggers</a></h2>
+
+<table border="1" cellspacing="1" width="100%" id="AutoNumber1">
+ <tr>
+ <td width="33%">Classname</td>
+ <td width="33%">Description</td>
+ <td width="34%">Type</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#DefaultLogger">org.apache.tools.ant.DefaultLogger</a></code></td>
+ <td width="33%">The logger used implicitly unless overridden with the
+ <code>-logger</code> command-line switch.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#NoBannerLogger">
+ org.apache.tools.ant.NoBannerLogger</a></code></td>
+ <td width="33%">This logger omits output of empty target output.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#MailLogger">
+ org.apache.tools.ant.listener.MailLogger</a></code></td>
+ <td width="33%">Extends DefaultLogger such that output is still generated
+ the same, and when the build is finished an e-mail can be sent.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#AnsiColorLogger">
+ org.apache.tools.ant.listener.AnsiColorLogger</a></code></td>
+ <td width="33%">Colorifies the build output.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#Log4jListener">
+ org.apache.tools.ant.listener.Log4jListener</a></code></td>
+ <td width="33%">Passes events to Log4j for highly customizable logging.</td>
+ <td width="34%">BuildListener</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#XmlLogger">org.apache.tools.ant.XmlLogger</a></code></td>
+ <td width="33%">Writes the build information to an XML file.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#TimestampedLogger">org.apache.tools.ant.TimestampedLogger</a></code></td>
+ <td width="33%">Prints the time that a build finished</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#BigProjectLogger">org.apache.tools.ant.listener.BigProjectLogger</a></code></td>
+ <td width="33%">Prints the project name every target</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#SimpleBigProjectLogger">org.apache.tools.ant.listener.SimpleBigProjectLogger</a></code></td>
+ <td width="33%">Prints the project name for subprojects only, otherwise like NoBannerLogger <em>Since Ant 1.8.1</em></td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+ <tr>
+ <td width="33%"><code><a href="#ProfileLogger">org.apache.tools.ant.listener.ProfileLogger</a></code></td>
+ <td width="33%">The default logger, with start times, end times and
+ durations added for each task and target.</td>
+ <td width="34%">BuildLogger</td>
+ </tr>
+</table>
+
+
+
+<h3><a name="DefaultLogger">DefaultLogger</a></h3>
+<p>Simply run Ant normally, or:</p>
+<blockquote>
+<p><code>ant -logger org.apache.tools.ant.DefaultLogger</code></p>
+</blockquote>
+
+
+
+<h3><a name="NoBannerLogger">NoBannerLogger</a></h3>
+<p>Removes output of empty target output.</p>
+<blockquote>
+<p><code>ant -logger org.apache.tools.ant.NoBannerLogger</code></p>
+</blockquote>
+
+
+
+<h3><a name="MailLogger">MailLogger</a></h3>
+<p>The MailLogger captures all output logged through DefaultLogger (standard Ant
+output) and will send success and failure messages to unique e-mail lists, with
+control for turning off success or failure messages individually.</p>
+
+<p>Properties controlling the operation of MailLogger:</p>
+<table border="1" cellspacing="1" width="100%" id="AutoNumber2">
+ <tr>
+ <th width="337">Property</th>
+ <th width="63%">Description</th>
+ <th width="63%">Required</th>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.mailhost </td>
+ <td width="63%">Mail server to use</td>
+ <td width="63%">No, default &quot;localhost&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.port </td>
+ <td width="63%">SMTP Port for the Mail server</td>
+ <td width="63%">No, default &quot;25&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.user</td>
+ <td width="63%">user name for SMTP auth</td>
+ <td width="63%">Yes, if SMTP auth is required on your SMTP server<br>
+ the email message will be then sent using Mime and requires JavaMail</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.password</td>
+ <td width="63%">password for SMTP auth</td>
+ <td width="63%">Yes, if SMTP auth is required on your SMTP server<br>
+ the email message will be then sent using Mime and requires JavaMail</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.ssl</td>
+ <td width="63%">on or true if ssl is needed<br>
+ This feature requires JavaMail</td>
+ <td width="63%">
+ no</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.from</td>
+ <td width="63%">Mail &quot;from&quot; address</td>
+ <td width="63%">Yes, if mail needs to be sent</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.replyto</td>
+ <td width="63%">Mail &quot;replyto&quot; address(es), comma-separated</td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.notify </td>
+ <td width="63%">Send build failure e-mails?</td>
+ <td width="63%">No, default &quot;true&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.notify </td>
+ <td width="63%">Send build success e-mails?</td>
+ <td width="63%">No, default &quot;true&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.to </td>
+ <td width="63%">Address(es) to send failure messages to, comma-separated</td>
+ <td width="63%">Yes, if failure mail is to be sent</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.to </td>
+ <td width="63%">Address(es) to send success messages to, comma-separated</td>
+ <td width="63%">Yes, if success mail is to be sent</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.cc </td>
+ <td width="63%">Address(es) to send failure messages to carbon copy (cc), comma-separated</td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.cc </td>
+ <td width="63%">Address(es) to send success messages to carbon copy (cc), comma-separated</td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.bcc </td>
+ <td width="63%">Address(es) to send failure messages to blind carbon copy (bcc), comma-separated</td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.bcc </td>
+ <td width="63%">Address(es) to send success messages to blind carbon copy (bcc), comma-separated</td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.subject </td>
+ <td width="63%">Subject of failed build</td>
+ <td width="63%">No, default &quot;Build Failure&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.subject </td>
+ <td width="63%">Subject of successful build</td>
+ <td width="63%">No, default &quot;Build Success&quot;</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.failure.body</td>
+ <td width="63%">Fixed body of the email for a failed
+ build. <em>Since Ant 1.8.0</em></td>
+ <td width="63%">No, default is to send the full log output.</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.success.body</td>
+ <td width="63%">Fixed body of the email for a successful
+ build. <em>Since Ant 1.8.0</em></td>
+ <td width="63%">No, default is to send the full log output.</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.mimeType</td>
+ <td width="63%">MIME-Type of the message. <em>Since Ant 1.8.0</em></td>
+ <td width="63%">No, default is text/plain</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.charset</td>
+ <td width="63%">Character set of the message. <em>Since Ant 1.8.0</em></td>
+ <td width="63%">No</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.starttls.enable</td>
+ <td width="63%">on or true if STARTTLS should be supported
+ (requires JavaMail). <em>Since Ant 1.8.0</em></td>
+ <td width="63%">No, default is false</td>
+ </tr>
+ <tr>
+ <td width="337">MailLogger.properties.file </td>
+ <td width="63%">Filename of properties file that will override other values.</td>
+ <td width="63%">No</td>
+ </tr>
+</table>
+
+<blockquote>
+<p><code>ant -logger org.apache.tools.ant.listener.MailLogger</code></p>
+</blockquote>
+
+
+
+<h3><a name="AnsiColorLogger">AnsiColorLogger</a></h3>
+
+<p>The AnsiColorLogger adds color to the standard Ant output
+by prefixing and suffixing ANSI color code escape sequences to
+it. It is just an extension of <a href="#DefaultLogger">DefaultLogger</a>
+and hence provides all features that DefaultLogger does.</p>
+<p>AnsiColorLogger differentiates the output by assigning
+different colors depending upon the type of the message.</p>
+<p>If used with the -logfile option, the output file
+will contain all the necessary escape codes to
+display the text in colorized mode when displayed
+in the console using applications like cat, more, etc.</p>
+<p>This is designed to work on terminals that support ANSI
+color codes. It works on XTerm, ETerm, Win9x Console
+(with ANSI.SYS loaded.), etc.</p>
+<p><Strong>NOTE:</Strong>
+It doesn't work on WinNT and successors, even when a COMMAND.COM console loaded with
+ANSI.SYS is used.</p>
+<p>If the user wishes to override the default colors
+with custom ones, a file containing zero or more of the
+custom color key-value pairs must be created. The recognized keys
+and their default values are shown below:</p><code><pre>
+AnsiColorLogger.ERROR_COLOR=2;31
+AnsiColorLogger.WARNING_COLOR=2;35
+AnsiColorLogger.INFO_COLOR=2;36
+AnsiColorLogger.VERBOSE_COLOR=2;32
+AnsiColorLogger.DEBUG_COLOR=2;34</pre></code>
+<p>Each key takes as value a color combination defined as
+<b>Attribute;Foreground;Background</b>. In the above example, background
+value has not been used.</p>
+<p>This file must be specified as the value of a system variable
+named ant.logger.defaults and passed as an argument using the -D
+option to the <b>java</b> command that invokes the Ant application.
+An easy way to achieve this is to add -Dant.logger.defaults=
+<i>/path/to/your/file</i> to the ANT_OPTS environment variable.
+Ant's launching script recognizes this flag and will pass it to
+the java command appropriately.</p>
+<p>Format:</p><pre>
+AnsiColorLogger.*=Attribute;Foreground;Background
+
+Attribute is one of the following:
+0 -&gt; Reset All Attributes (return to normal mode)
+1 -&gt; Bright (Usually turns on BOLD)
+2 -&gt; Dim
+3 -&gt; Underline
+5 -&gt; link
+7 -&gt; Reverse
+8 -&gt; Hidden
+
+Foreground is one of the following:
+30 -&gt; Black
+31 -&gt; Red
+32 -&gt; Green
+33 -&gt; Yellow
+34 -&gt; Blue
+35 -&gt; Magenta
+36 -&gt; Cyan
+37 -&gt; White
+
+Background is one of the following:
+40 -&gt; Black
+41 -&gt; Red
+42 -&gt; Green
+43 -&gt; Yellow
+44 -&gt; Blue
+45 -&gt; Magenta
+46 -&gt; Cyan
+47 -&gt; White</pre>
+
+<blockquote>
+<p><code>ant -logger org.apache.tools.ant.listener.AnsiColorLogger</code></p>
+</blockquote>
+
+
+
+<h3><a name="Log4jListener">Log4jListener</a></h3>
+<p>Passes build events to Log4j, using the full classname's of the generator of
+each build event as the category:</p>
+<ul>
+ <li>build started / build finished - org.apache.tools.ant.Project</li>
+ <li>target started / target finished - org.apache.tools.ant.Target</li>
+ <li>task started / task finished - the fully qualified classname of the task</li>
+ <li>message logged - the classname of one of the above, so if a task logs a
+ message, its classname is the category used, and so on.</li>
+</ul>
+<p>All start events are logged as INFO.&nbsp; Finish events are either logged as
+INFO or ERROR depending on whether the build failed during that stage. Message
+events are logged according to their Ant logging level, mapping directly to a
+corresponding Log4j level.</p>
+
+<blockquote>
+<p><code>ant -listener org.apache.tools.ant.listener.Log4jListener</code></p>
+</blockquote>
+
+<p>To use Log4j you will need the Log4j JAR file and a 'log4j.properties'
+configuration file. Both should be placed somewhere in your Ant
+classpath. If the log4j.properties is in your project root folder you can
+add this with <i>-lib</i> option:</p>
+
+<blockquote>
+<pre><code>ant -listener org.apache.tools.ant.listener.Log4jListener -lib .</code></pre>
+</blockquote>
+
+<p>If, for example, you wanted to capture the same information output to the
+console by the DefaultLogger and send it to a file named 'build.log', you
+could use the following configuration:</p>
+
+<blockquote>
+<pre><code>log4j.rootLogger=ERROR, LogFile
+log4j.logger.org.apache.tools.ant.Project=INFO
+log4j.logger.org.apache.tools.ant.Target=INFO
+log4j.logger.org.apache.tools.ant.taskdefs=INFO
+log4j.logger.org.apache.tools.ant.taskdefs.Echo=WARN
+
+log4j.appender.LogFile=org.apache.log4j.FileAppender
+log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout
+log4j.appender.LogFile.layout.ConversionPattern=[%6r] %8c{1} : %m%n
+log4j.appender.LogFile.file=build.log
+</code></pre>
+</blockquote>
+
+<p>For more information about configuring Log4J see <a href="http://logging.apache.org/log4j/docs/documentation.html">its
+documentation page</a>.</p>
+
+
+
+<h3><a name="XmlLogger">XmlLogger</a></h3>
+<p>Writes all build information out to an XML file named log.xml, or the value
+of the <code>XmlLogger.file</code> property if present, when used as a
+listener. When used as a logger, it writes all output to either the
+console or to the value of <code>-logfile</code>. Whether used as a listener
+or logger, the output is not generated until the build is complete, as it
+buffers the information in order to provide timing information for task,
+targets, and the project.</p>
+<p>By default the XML file creates a reference to an XSLT file "log.xsl" in the current directory;
+look in ANT_HOME/etc for one of these. You can set the property
+<code>ant.XmlLogger.stylesheet.uri</code> to provide a uri to a style sheet.
+this can be a relative or absolute file path, or an http URL.
+If you set the property to the empty string, "", no XSLT transform
+is declared at all.</p>
+
+<blockquote>
+<p><code>ant -listener org.apache.tools.ant.XmlLogger</code><br>
+<code>ant -logger org.apache.tools.ant.XmlLogger -verbose -logfile build_log.xml</code></p>
+</blockquote>
+
+
+
+
+<h3><a name="TimestampedLogger">TimestampedLogger</a></h3>
+<p>
+ Acts like the default logger, except that the final success/failure message also includes
+ the time that the build completed. For example:
+</p>
+<pre>
+ BUILD SUCCESSFUL - at 16/08/05 16:24
+</pre>
+<p>To use this listener, use the command:</p>
+
+<blockquote>
+<code>ant -logger org.apache.tools.ant.listener.TimestampedLogger</code>
+</blockquote>
+
+
+
+<h3><a name="BigProjectLogger">BigProjectLogger</a></h3>
+<p>
+ This logger is designed to make examining the logs of a big build easier,
+ especially those run under continuous integration tools. It
+</p>
+<ol>
+ <li>When entering a child project, prints its name and directory</li>
+ <li>When exiting a child project, prints its name</li>
+ <li>Includes the name of the project when printing a target</li>
+ <li>Omits logging the names of all targets that have no direct task output</li>
+ <li>Includes the build finished timestamp of the TimeStamp logger</li>
+</ol>
+<p>
+ This is useful when using &lt;subant&gt; to build a large project
+ from many smaller projects -the output shows which particular
+ project is building. Here is an example in which "clean" is being called
+ on all a number of child projects, only some of which perform work:
+</p>
+<pre>
+
+======================================================================
+Entering project "xunit"
+In /home/ant/components/xunit
+======================================================================
+
+xunit.clean:
+ [delete] Deleting directory /home/ant/components/xunit/build
+ [delete] Deleting directory /home/ant/components/xunit/dist
+
+======================================================================
+Exiting project "xunit"
+======================================================================
+
+======================================================================
+Entering project "junit"
+In /home/ant/components/junit
+======================================================================
+
+======================================================================
+Exiting project "junit"
+======================================================================
+</pre>
+
+<p>
+ The entry and exit messages are very verbose in this example, but in
+ a big project compiling or testing many child components, the messages
+ are reduced to becoming clear delimiters of where different projects
+ are in charge -or more importantly, which project is failing.
+</p>
+<p>To use this listener, use the command:</p>
+<blockquote>
+<code>ant -logger org.apache.tools.ant.listener.BigProjectLogger</code>
+</blockquote>
+
+<h3><a name="SimpleBigProjectLogger">SimpleBigProjectLogger</a></h3>
+<p>Like <code>BigProjectLogger</code>, project-qualified target names are printed,
+useful for big builds with subprojects.
+Otherwise it is as quiet as <code>NoBannerLogger</code>:</p>
+<pre>
+Buildfile: /sources/myapp/build.xml
+
+myapp-lib.compile:
+Created dir: /sources/myapp/lib/build/classes
+Compiling 1 source file to /sources/myapp/lib/build/classes
+
+myapp-lib.jar:
+Building jar: /sources/myapp/lib/build/lib.jar
+
+myapp.compile:
+Created dir: /sources/myapp/build/classes
+Compiling 2 source files to /sources/myapp/build/classes
+
+myapp.jar:
+Building jar: /sources/myapp/build/myapp.jar
+
+BUILD SUCCESSFUL
+Total time: 1 second
+</pre>
+<p><b>since Ant 1.8.1</b></p>
+<p>To use this listener, use the command:</p>
+<blockquote>
+<code>ant -logger org.apache.tools.ant.listener.SimpleBigProjectLogger</code>
+</blockquote>
+
+<h3><a name="ProfileLogger">ProfileLogger</a></h3>
+<p>This logger stores the time needed for executing a task, target and the whole build and prints
+these information. The output contains a timestamp when entering the build, target or task and a timestamp and the needed time when exiting.
+</p>
+<!-- This is the 'since' as described in the Loggers JavaDoc -->
+<p><b>since Ant 1.8.0</b></p>
+<h4>Example</h4>
+Having that buildfile
+<pre>
+&lt;project&gt;
+ &lt;target name=&quot;aTarget&quot;&gt;
+ &lt;echo&gt;echo-task&lt;/echo&gt;
+ &lt;zip destfile=&quot;my.zip&quot;&gt;
+ &lt;fileset dir=&quot;${ant.home}&quot;/&gt;
+ &lt;/zip&gt;
+ &lt;/target&gt;
+ &lt;target name=&quot;anotherTarget&quot; depends=&quot;aTarget&quot;&gt;
+ &lt;echo&gt;another-echo-task&lt;/echo&gt;
+ &lt;/target&gt;
+&lt;/project&gt;
+</pre>
+and executing with <tt>ant -logger org.apache.tools.ant.listener.ProfileLogger anotherTarget</tt> gives that output (with other timestamps and duration of course ;) :
+<pre>
+Buildfile: ...\build.xml
+
+Target aTarget: started Thu Jan 22 09:01:00 CET 2009
+
+echo: started Thu Jan 22 09:01:00 CET 2009
+ [echo] echo-task
+
+echo: finished Thu Jan 22 09:01:00 CET 2009 (250ms)
+
+zip: started Thu Jan 22 09:01:00 CET 2009
+ [zip] Building zip: ...\my.zip
+
+zip: finished Thu Jan 22 09:01:01 CET 2009 (1313ms)
+
+Target aTarget: finished Thu Jan 22 09:01:01 CET 2009 (1719ms)
+
+Target anotherTarget: started Thu Jan 22 09:01:01 CET 2009
+
+echo: started Thu Jan 22 09:01:01 CET 2009
+ [echo] another-echo-task
+
+echo: finished Thu Jan 22 09:01:01 CET 2009 (0ms)
+
+Target anotherTarget: finished Thu Jan 22 09:01:01 CET 2009 (0ms)
+
+BUILD SUCCESSFUL
+Total time: 2 seconds
+</pre>
+
+
+
+<h2><a name="dev">Writing your own</a></h2>
+
+<p>See the <a href="develop.html#buildevents">Build Events</a> section for
+developers.</p>
+
+<p>Notes:</p>
+
+<ul>
+ <li>
+ A listener or logger should not write to standard output or error in the <code>messageLogged() method</code>;
+ Ant captures these internally and it will trigger an infinite loop.
+ </li>
+ <li>
+ Logging is synchronous; all listeners and loggers are called one after the other, with the build blocking until
+ the output is processed. Slow logging means a slow build.
+ </li>
+ <li>When a build is started, and <code>BuildListener.buildStarted(BuildEvent event)</code> is called,
+ the project is not fully functional. The build has started, yes, and the event.getProject() method call
+ returns the Project instance, but that project is initialized with JVM and ant properties, nor has it
+ parsed the build file yet. You cannot call <code>Project.getProperty()</code> for property lookup, or
+ <code>Project.getName()</code> to get the project name (it will return null).
+ </li>
+ <li>
+ Classes that implement <code>org.apache.tools.ant.SubBuildListener</code> receive notifications when child projects
+ start and stop.
+ </li>
+</ul>
+
+</body>
+</html>