Browse Source

Because I got fed up of trying to remember when I last ran a build from a particular command line. Did some constant extraction on the commons/log4j listener while I was in the directory.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278517 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 20 years ago
parent
commit
760ab74bbb
6 changed files with 113 additions and 17 deletions
  1. +3
    -0
      WHATSNEW
  2. +22
    -2
      docs/manual/listeners.html
  3. +22
    -8
      src/main/org/apache/tools/ant/DefaultLogger.java
  4. +15
    -6
      src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java
  5. +6
    -1
      src/main/org/apache/tools/ant/listener/Log4jListener.java
  6. +45
    -0
      src/main/org/apache/tools/ant/listener/TimestampedLogger.java

+ 3
- 0
WHATSNEW View File

@@ -256,6 +256,9 @@ Other changes:
* <javadoc> now supports -breakiterator for custom doclets if Ant is * <javadoc> now supports -breakiterator for custom doclets if Ant is
running on JSE 5.0 or higher. Bugzilla Report: 34580. running on JSE 5.0 or higher. Bugzilla Report: 34580.


* New logger, TimestampedLogger, that prints the wall time that a build finished/failed
Use with -logger org.apache.tools.ant.listener.TimestampedLogger

Changes from Ant 1.6.4 to Ant 1.6.5 Changes from Ant 1.6.4 to Ant 1.6.5
=================================== ===================================




+ 22
- 2
docs/manual/listeners.html View File

@@ -83,6 +83,12 @@ listeners and loggers.</p>
<td width="33%">Writes the build information to an XML file.</td> <td width="33%">Writes the build information to an XML file.</td>
<td width="34%">BuildLogger</td> <td width="34%">BuildLogger</td>
</tr> </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>

</table> </table>
<h3><a name="DefaultLogger">DefaultLogger</a></h3> <h3><a name="DefaultLogger">DefaultLogger</a></h3>


@@ -313,19 +319,33 @@ ANT_HOME/etc for one of these. You can set the property
this can be a relative or absolute file path, or an http URL. 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 If you set the property to the empty string, "", no XSLT transform
is declared at all. 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> </p>
<pre>
BUILD SUCCESSFUL - at 16/08/05 16:24
</pre>


<blockquote> <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>
<code>ant -logger org.apache.tools.ant.listener.TimestampedLogger</code>


</blockquote> </blockquote>



<h2><a name="dev">Writing your own</a></h2> <h2><a name="dev">Writing your own</a></h2>


<p>See the <a href="develop.html#buildevents">Build Events</a> section for <p>See the <a href="develop.html#buildevents">Build Events</a> section for


+ 22
- 8
src/main/org/apache/tools/ant/DefaultLogger.java View File

@@ -21,6 +21,7 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.io.StringReader; import java.io.StringReader;

import org.apache.tools.ant.util.DateUtils; import org.apache.tools.ant.util.DateUtils;
import org.apache.tools.ant.util.StringUtils; import org.apache.tools.ant.util.StringUtils;


@@ -131,24 +132,19 @@ public class DefaultLogger implements BuildLogger {
public void buildFinished(BuildEvent event) { public void buildFinished(BuildEvent event) {
Throwable error = event.getException(); Throwable error = event.getException();
StringBuffer message = new StringBuffer(); StringBuffer message = new StringBuffer();

if (error == null) { if (error == null) {
message.append(StringUtils.LINE_SEP); message.append(StringUtils.LINE_SEP);
message.append("BUILD SUCCESSFUL");
message.append(getBuildSuccessfulMessage());
} else { } else {
message.append(StringUtils.LINE_SEP); message.append(StringUtils.LINE_SEP);
message.append("BUILD FAILED");
message.append(getBuildFailedMessage());
message.append(StringUtils.LINE_SEP); message.append(StringUtils.LINE_SEP);


if (Project.MSG_VERBOSE <= msgOutputLevel if (Project.MSG_VERBOSE <= msgOutputLevel
|| !(error instanceof BuildException)) { || !(error instanceof BuildException)) {
message.append(StringUtils.getStackTrace(error)); message.append(StringUtils.getStackTrace(error));
} else { } else {
if (error instanceof BuildException) {
message.append(error.toString()).append(lSep);
} else {
message.append(error.getMessage()).append(lSep);
}
message.append(error.toString()).append(lSep);
} }
} }
message.append(StringUtils.LINE_SEP); message.append(StringUtils.LINE_SEP);
@@ -164,6 +160,24 @@ public class DefaultLogger implements BuildLogger {
log(msg); log(msg);
} }


/**
* This is an override point: the message that indicates whether a build failed.
* Subclasses can change/enhance the message.
* @return The classic "BUILD FAILED"
*/
protected String getBuildFailedMessage() {
return "BUILD FAILED";
}

/**
* This is an override point: the message that indicates that a build succeeded.
* Subclasses can change/enhance the message.
* @return The classic "BUILD SUCCESSFUL"
*/
protected String getBuildSuccessfulMessage() {
return "BUILD SUCCESSFUL";
}

/** /**
* Logs a message to say that the target has started if this * Logs a message to say that the target has started if this
* logger allows information-level messages. * logger allows information-level messages.


+ 15
- 6
src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java View File

@@ -57,6 +57,15 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {


private LogFactory logFactory; private LogFactory logFactory;


/**
* name of the category under which target events are logged
*/
public static final String TARGET_LOG = "org.apache.tools.ant.Target";
/**
* name of the category under which project events are logged
*/
public static final String PROJECT_LOG = "org.apache.tools.ant.Project";

/** /**
* Construct the listener and make sure that a LogFactory * Construct the listener and make sure that a LogFactory
* can be obtained. * can be obtained.
@@ -95,7 +104,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {
* @see BuildListener#buildStarted * @see BuildListener#buildStarted
*/ */
public void buildStarted(BuildEvent event) { public void buildStarted(BuildEvent event) {
String categoryString = "org.apache.tools.ant.Project";
String categoryString = PROJECT_LOG;
Log log = getLog(categoryString, null); Log log = getLog(categoryString, null);


if (initialized) { if (initialized) {
@@ -108,7 +117,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {
*/ */
public void buildFinished(BuildEvent event) { public void buildFinished(BuildEvent event) {
if (initialized) { if (initialized) {
String categoryString = "org.apache.tools.ant.Project";
String categoryString = PROJECT_LOG;
Log log = getLog(categoryString, event.getProject().getName()); Log log = getLog(categoryString, event.getProject().getName());


if (event.getException() == null) { if (event.getException() == null) {
@@ -125,7 +134,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {
*/ */
public void targetStarted(BuildEvent event) { public void targetStarted(BuildEvent event) {
if (initialized) { if (initialized) {
Log log = getLog("org.apache.tools.ant.Target",
Log log = getLog(TARGET_LOG,
event.getTarget().getName()); event.getTarget().getName());
// Since task log category includes target, we don't really // Since task log category includes target, we don't really
// need this message // need this message
@@ -140,7 +149,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {
public void targetFinished(BuildEvent event) { public void targetFinished(BuildEvent event) {
if (initialized) { if (initialized) {
String targetName = event.getTarget().getName(); String targetName = event.getTarget().getName();
Log log = getLog("org.apache.tools.ant.Target",
Log log = getLog(TARGET_LOG,
event.getTarget().getName()); event.getTarget().getName());
if (event.getException() == null) { if (event.getException() == null) {
realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null); realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null);
@@ -214,10 +223,10 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger {
categoryObject = event.getTarget(); categoryObject = event.getTarget();
if (categoryObject == null) { if (categoryObject == null) {
categoryObject = event.getProject(); categoryObject = event.getProject();
categoryString = "org.apache.tools.ant.Project";
categoryString = PROJECT_LOG;
categoryDetail = event.getProject().getName(); categoryDetail = event.getProject().getName();
} else { } else {
categoryString = "org.apache.tools.ant.Target";
categoryString = TARGET_LOG;
categoryDetail = event.getTarget().getName(); categoryDetail = event.getTarget().getName();
} }
} else { } else {


+ 6
- 1
src/main/org/apache/tools/ant/listener/Log4jListener.java View File

@@ -35,12 +35,17 @@ public class Log4jListener implements BuildListener {
/** Indicates if the listener was initialized. */ /** Indicates if the listener was initialized. */
private boolean initialized = false; private boolean initialized = false;


/**
* log category we log into
*/
public static final String LOG_ANT = "org.apache.tools.ant";

/** /**
* Construct the listener and make sure there is a valid appender. * Construct the listener and make sure there is a valid appender.
*/ */
public Log4jListener() { public Log4jListener() {
initialized = false; initialized = false;
Logger log = Logger.getLogger("org.apache.tools.ant");
Logger log = Logger.getLogger(LOG_ANT);
Logger rootLog = Logger.getRootLogger(); Logger rootLog = Logger.getRootLogger();
if (!(rootLog.getAllAppenders() instanceof NullEnumeration)) { if (!(rootLog.getAllAppenders() instanceof NullEnumeration)) {
initialized = true; initialized = true;


+ 45
- 0
src/main/org/apache/tools/ant/listener/TimestampedLogger.java View File

@@ -0,0 +1,45 @@
package org.apache.tools.ant.listener;

import org.apache.tools.ant.DefaultLogger;

import java.util.Date;
import java.text.DateFormat;

/**
* Like a normal logger, except with timed outputs
*/
public class TimestampedLogger extends DefaultLogger {

/**
* what appears between the old message and the new
*/
private static final String SPACER = " - at ";


/**
* This is an override point: the message that indicates whether a build failed.
* Subclasses can change/enhance the message.
*
* @return The classic "BUILD FAILED"
*/
protected String getBuildFailedMessage() {
return super.getBuildFailedMessage() + SPACER + getTimestamp();
}

/**
* This is an override point: the message that indicates that a build succeeded.
* Subclasses can change/enhance the message.
*
* @return The classic "BUILD SUCCESSFUL"
*/
protected String getBuildSuccessfulMessage() {
return super.getBuildSuccessfulMessage()+SPACER +getTimestamp();
}

protected String getTimestamp() {
Date date = new Date(System.currentTimeMillis());
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
String finishTime = formatter.format(date);
return finishTime;
}
}

Loading…
Cancel
Save