Hi,

We've just added our Ant build to CruiseControl and are working to make it as usable as possible. One of our issues is the interpretation of Ant log messages by CruiseControl. CruiseControl captures all log messages issued by the Ant build and captures the messages' levels (DEBUG, INFO, etc.). The CruiseControl reporting app uses these levels to filter what gets displayed in different sections of the build report. By default, all Ant WARN or ERROR messages are displayed in CruiseControl's "Errors/Warnings" report. Naturally, we're now interested in making sure our build's Ant log messages are logged with an appropriate level. I think this is similar to other Ant users' concerns - see the "Setting Project.MSG_ERR for compiler error messages" message posted just today.

It seems like it's basically the individual task that's responsible for figuring out the log level for a given message it issues. Some tasks give the buildfile control over this - like <echo> - while others don't - like <java>.

I'd like to propose that exec-like tasks like <exec> and <java>, which already support <redirector> functionality for process output, extend that functionality to allow <redirector>s that say exactly how Ant should log the output from the exec'd process. In Ant 1.6.5 you can specify a <redirector> that redirects stdout and stderr, independently, to a property or to a file:

<exec executable="cat">
 <redirector outputproperty="redirector.out"
                    error="outputs/redirector.err.txt"/>
  </redirector>
</exec>

What if you could specify a <redirector> that redirects to Ant log messages, but explicitly sets the log level:

<exec executable="cat">
 <redirector outputproperty="redirector.out"
                    errorlog="true"
                    errorloglevel="INFO"/>
  </redirector>
</exec>

The above redirector would send cat's stdout to the Ant property "redirector.out", while sending cat's stderr to the Ant log as INFO messages. Or what I think would be better syntax:

<exec executable="cat">
 <redirector>
   <output>
      <property name="redirector.out"/>
    </output>
    <error>
       <log level="INFO"/>
    </error>
  </redirector>
</exec>

I understand that logging a process's stdout as INFO messages and its stderr as WARN messages is a good general rule. But different programs use stdout and stderr in different ways. Some programs really do use stderr to separate critical errors that the user must see, so that stderr really should be a higher level than stdout. Other programs use stderr to separate verbose information that may only be interesting to the user while running the program and shouldn't be considered part of the real output, so that stderr may actually be less important than stdout. Therefore it makes more sense to treat stdout and stderr as separate categories of messages rather than different levels, where one is always more important than the other.

Does anyone else see this as a useful enhancement to Ant's <redirector>?

Thanks,
Jim


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to