FileDocCategorySizeDatePackage
DefaultLogger.javaAPI DocApache Ant 1.7011032Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant

DefaultLogger

public class DefaultLogger extends Object implements BuildLogger
Writes build events to a PrintStream. Currently, it only writes which targets are being executed, and any messages that get logged.

Fields Summary
public static final int
LEFT_COLUMN_SIZE
Size of left-hand column for right-justified task name.
protected PrintStream
out
PrintStream to write non-error messages to
protected PrintStream
err
PrintStream to write error messages to
protected int
msgOutputLevel
Lowest level of message to write out
private long
startTime
Time of the start of the build
protected static final String
lSep
Line separator
protected boolean
emacsMode
Whether or not to use emacs-style output
Constructors Summary
public DefaultLogger()
Sole constructor.

    // CheckStyle:VisibilityModifier ON


           
      
    
Methods Summary
public voidbuildFinished(BuildEvent event)
Prints whether the build succeeded or failed, any errors the occurred during the build, and how long the build took.

param
event An event with any relevant extra information. Must not be null.

        Throwable error = event.getException();
        StringBuffer message = new StringBuffer();
        if (error == null) {
            message.append(StringUtils.LINE_SEP);
            message.append(getBuildSuccessfulMessage());
        } else {
            message.append(StringUtils.LINE_SEP);
            message.append(getBuildFailedMessage());
            message.append(StringUtils.LINE_SEP);

            if (Project.MSG_VERBOSE <= msgOutputLevel
                || !(error instanceof BuildException)) {
                message.append(StringUtils.getStackTrace(error));
            } else {
                message.append(error.toString()).append(lSep);
            }
        }
        message.append(StringUtils.LINE_SEP);
        message.append("Total time: ");
        message.append(formatTime(System.currentTimeMillis() - startTime));

        String msg = message.toString();
        if (error == null) {
            printMessage(msg, out, Project.MSG_VERBOSE);
        } else {
            printMessage(msg, err, Project.MSG_ERR);
        }
        log(msg);
    
public voidbuildStarted(BuildEvent event)
Responds to a build being started by just remembering the current time.

param
event Ignored.

        startTime = System.currentTimeMillis();
    
protected static java.lang.StringformatTime(long millis)
Convenience method to format a specified length of time.

param
millis Length of time to format, in milliseconds.
return
the time as a formatted string.
see
DateUtils#formatElapsedTime(long)

        return DateUtils.formatElapsedTime(millis);
    
protected java.lang.StringgetBuildFailedMessage()
This is an override point: the message that indicates whether a build failed. Subclasses can change/enhance the message.

return
The classic "BUILD FAILED"

        return "BUILD FAILED";
    
protected java.lang.StringgetBuildSuccessfulMessage()
This is an override point: the message that indicates that a build succeeded. Subclasses can change/enhance the message.

return
The classic "BUILD SUCCESSFUL"

        return "BUILD SUCCESSFUL";
    
protected voidlog(java.lang.String message)
Empty implementation which allows subclasses to receive the same output that is generated here.

param
message Message being logged. Should not be null.

    
public voidmessageLogged(BuildEvent event)
Logs a message, if the priority is suitable. In non-emacs mode, task level messages are prefixed by the task name which is right-justified.

param
event A BuildEvent containing message information. Must not be null.

        int priority = event.getPriority();
        // Filter out messages based on priority
        if (priority <= msgOutputLevel) {

            StringBuffer message = new StringBuffer();
            if (event.getTask() != null && !emacsMode) {
                // Print out the name of the task if we're in one
                String name = event.getTask().getTaskName();
                String label = "[" + name + "] ";
                int size = LEFT_COLUMN_SIZE - label.length();
                StringBuffer tmp = new StringBuffer();
                for (int i = 0; i < size; i++) {
                    tmp.append(" ");
                }
                tmp.append(label);
                label = tmp.toString();

                try {
                    BufferedReader r =
                        new BufferedReader(
                            new StringReader(event.getMessage()));
                    String line = r.readLine();
                    boolean first = true;
                    do {
                        if (first) {
                            if (line == null) {
                                message.append(label);
                                break;
                            }
                        } else {
                            message.append(StringUtils.LINE_SEP);
                        }
                        first = false;
                        message.append(label).append(line);
                        line = r.readLine();
                    } while (line != null);
                } catch (IOException e) {
                    // shouldn't be possible
                    message.append(label).append(event.getMessage());
                }
            } else {
                message.append(event.getMessage());
            }
            Throwable ex = event.getException();
            if (Project.MSG_DEBUG <= msgOutputLevel && ex != null) {
                    message.append(StringUtils.getStackTrace(ex));
            }

            String msg = message.toString();
            if (priority != Project.MSG_ERR) {
                printMessage(msg, out, priority);
            } else {
                printMessage(msg, err, priority);
            }
            log(msg);
        }
    
protected voidprintMessage(java.lang.String message, java.io.PrintStream stream, int priority)
Prints a message to a PrintStream.

param
message The message to print. Should not be null.
param
stream A PrintStream to print the message to. Must not be null.
param
priority The priority of the message. (Ignored in this implementation.)

        stream.println(message);
    
public voidsetEmacsMode(boolean emacsMode)
Sets this logger to produce emacs (and other editor) friendly output.

param
emacsMode true if output is to be unadorned so that emacs and other editors can parse files names, etc.

        this.emacsMode = emacsMode;
    
public voidsetErrorPrintStream(java.io.PrintStream err)
Sets the output stream to which this logger is to send error messages.

param
err The error stream for the logger. Must not be null.

        this.err = new PrintStream(err, true);
    
public voidsetMessageOutputLevel(int level)
Sets the highest level of message this logger should respond to. Only messages with a message level lower than or equal to the given level should be written to the log.

Constants for the message levels are in the {@link Project Project} class. The order of the levels, from least to most verbose, is MSG_ERR, MSG_WARN, MSG_INFO, MSG_VERBOSE, MSG_DEBUG.

The default message level for DefaultLogger is Project.MSG_ERR.

param
level the logging level for the logger.

        this.msgOutputLevel = level;
    
public voidsetOutputPrintStream(java.io.PrintStream output)
Sets the output stream to which this logger is to send its output.

param
output The output stream for the logger. Must not be null.

        this.out = new PrintStream(output, true);
    
public voidtargetFinished(BuildEvent event)
No-op implementation.

param
event Ignored.

    
public voidtargetStarted(BuildEvent event)
Logs a message to say that the target has started if this logger allows information-level messages.

param
event An event with any relevant extra information. Must not be null.

        if (Project.MSG_INFO <= msgOutputLevel
            && !event.getTarget().getName().equals("")) {
            String msg = StringUtils.LINE_SEP
                + event.getTarget().getName() + ":";
            printMessage(msg, out, event.getPriority());
            log(msg);
        }
    
public voidtaskFinished(BuildEvent event)
No-op implementation.

param
event Ignored.

    
public voidtaskStarted(BuildEvent event)
No-op implementation.

param
event Ignored.