Loggers and listeners

Overview

NAnt has two related features to allow the build process to be monitored: listeners and loggers.

Listeners

A listener is alerted of the following events:

  • build started
  • build finished
  • target started
  • target finished
  • task started
  • task finished
  • message logged

Loggers

Loggers extend the capabilities of listeners and add the following features:

  • Receives a handle to the standard output and error print streams and therefore can log information to the console or the -logfile specified file.
  • Logging level (-quiet, -verbose, -debug) aware.
  • Emacs-mode aware. This still needs to be implemented.

Built-in Listeners/Loggers

Class Description Type
NAnt.Core.DefaultLogger The logger used implicitly unless overridden with the -logger command-line switch. IBuildLogger
NAnt.Core.MailLogger Extends DefaultLogger such that output is still generated the same, and when the build is finished an e-mail can be sent. IBuildLogger
NAnt.Core.XmlLogger Generates output in XML format. IBuildLogger

DefaultLogger

Simply run NAnt normally, or:

    NAnt.exe -logger:NAnt.Core.DefaultLogger

MailLogger

The MailLogger captures all output logged through DefaultLogger (standard NAnt output) and will send success and failure messages to unique e-mail lists, with control for turning off success or failure messages individually.

Properties controlling the operation of MailLogger are:

Property Description Required
MailLogger.mailhost The SMTP server to use. No, default is "localhost"
MailLogger.from The address of the e-mail sender. Yes, if mail needs to be sent.
MailLogger.failure.notify Send build failure e-mails ? No, default is "true".
MailLogger.success.notify Send build success e-mails ? No, default is "true".
MailLogger.failure.to The address to send build failure messages to. Yes, if failure mail is to be sent.
MailLogger.success.to The address to send build success messages to. Yes, if success mail is to be sent.
MailLogger.failure.subject The subject of build failure messages. No, default is "Build Failure".
MailLogger.success.subject The subject of build success messages. No, default is "Build Success".
MailLogger.failure.attachments The ID of a fileset representing a set of files to attach when the build fails. No.
MailLogger.success.attachments The ID of a fileset representing a set of files to attach when the build is successful. No.
MailLogger.body.encoding The encoding type of the body of the e-mail message. No, default is system's ANSI code page.
MailLogger.smtp.username1 The name of the user to login to the SMTP server. No.
MailLogger.smtp.password1 The password of the specified user. No.
MailLogger.smtp.enablessl1 Specifies whether to use SSL to encrypt the connection. No, default is "false".
MailLogger.smtp.port1 The SMTP server port to connect to. No, default is "25".

1 Only available when NAnt is built targeting .NET Framework 1.1 (or equivalent) or higher.

Usage:

    NAnt.exe -logger:NAnt.Core.MailLogger

Example:

    <project name="MailLogger Test" default="build">
        <property name="MailLogger.mailhost" value="smtp.wherever.be" />
        <property name="MailLogger.from" value="me@telenet.be" />
        <property name="MailLogger.failure.notify" value="true" />
        <property name="MailLogger.success.notify" value="true" />
        <property name="MailLogger.failure.to" value="support@home.be" />
        <property name="MailLogger.success.to" value="support@home.be" />
        <property name="MailLogger.failure.subject" value="Nightly build failure !" />
        <property name="MailLogger.success.subject" value="Nightly build successful" />
        <property name="MailLogger.failure.attachments" value="MailLogger.failure.files" />
        <property name="MailLogger.success.attachments" value="MailLogger.success.files" />

        <!-- set of files to attach when build fails -->
        <fileset id="MailLogger.failure.files">
            <include name="dump.log" />
            <include name="trace.txt" />
        </fileset>

        <!-- set of files to attach when build is successful -->
        <fileset id="MailLogger.success.files">
            <include name="trace.txt" />
        </fileset>
    
        <target name="build">
            <echo message="Starting build" />
            ....
            <echo message="Finished build" />
        </target>
    </project>

XmlLogger

Writes all build information out to an XML file named log.xml, or the value of the XmlLogger.file 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 -logfile.

Whether used as a listener or logger, the output is not generated until the build is complete.

Usage:

    NAnt.exe -listener:NAnt.Core.XmlLogger
    NAnt.exe -logger:NAnt.Core.XmlLogger -logfile:buildlog.xml

Example:

    <buildresults project="test">
        <message level="Info"><![CDATA[Buildfile: file:///D:/nant-test/xmlpeek/default.build]]></message>
        <message level="Info"><![CDATA[Target framework: Microsoft .NET Framework 1.1]]></message>
        <message level="Info"><![CDATA[Target(s) specified: build]]></message>
        <target name="build">
            <task name="xmlpeek">
                <message level="Info"><![CDATA[Peeking at 'D:\nant-test\xmlpeek\input.xml' with XPath expression 'x:parameters/x:param'.]]></message>
                <message level="Info"><![CDATA[Found '1' nodes with the XPath expression 'x:parameters/x:param'.]]></message>
                <duration>15.625</duration>
            </task>
            <duration>15.625</duration>
        </target>
        <duration>31.25</duration>
    </buildresults>