|
|
@@ -16,8 +16,11 @@ |
|
|
|
*/ |
|
|
|
package org.apache.tools.ant.taskdefs; |
|
|
|
|
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.PrintStream; |
|
|
|
import org.apache.tools.ant.BuildEvent; |
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
import org.apache.tools.ant.BuildLogger; |
|
|
|
import org.apache.tools.ant.DefaultLogger; |
|
|
|
import org.apache.tools.ant.Project; |
|
|
@@ -28,7 +31,6 @@ import org.apache.tools.ant.util.StringUtils; |
|
|
|
* This is a class that represents a recorder. This is the listener to the |
|
|
|
* build process. |
|
|
|
* |
|
|
|
* @version 0.5 |
|
|
|
* @since Ant 1.4 |
|
|
|
*/ |
|
|
|
public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
@@ -80,6 +82,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
*/ |
|
|
|
public void setRecordState(Boolean state) { |
|
|
|
if (state != null) { |
|
|
|
flush(); |
|
|
|
record = state.booleanValue(); |
|
|
|
} |
|
|
|
} |
|
|
@@ -93,6 +96,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
public void buildFinished(BuildEvent event) { |
|
|
|
log("< BUILD FINISHED", Project.MSG_DEBUG); |
|
|
|
|
|
|
|
if (record && out != null) { |
|
|
|
Throwable error = event.getException(); |
|
|
|
|
|
|
|
if (error == null) { |
|
|
@@ -102,6 +106,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
+ StringUtils.LINE_SEP); |
|
|
|
error.printStackTrace(out); |
|
|
|
} |
|
|
|
} |
|
|
|
cleanup(); |
|
|
|
} |
|
|
|
|
|
|
@@ -145,7 +150,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
String time = formatTime(System.currentTimeMillis() - targetStartTime); |
|
|
|
|
|
|
|
log(event.getTarget() + ": duration " + time, Project.MSG_VERBOSE); |
|
|
|
out.flush(); |
|
|
|
flush(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@@ -156,7 +161,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
|
|
|
|
public void taskFinished(BuildEvent event) { |
|
|
|
log("<<< TASK FINISHED -- " + event.getTask(), Project.MSG_DEBUG); |
|
|
|
out.flush(); |
|
|
|
flush(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@@ -191,10 +196,16 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
* @param level The verbosity level of the message. |
|
|
|
*/ |
|
|
|
private void log(String mesg, int level) { |
|
|
|
if (record && (level <= loglevel)) { |
|
|
|
if (record && (level <= loglevel) && out != null) { |
|
|
|
out.println(mesg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void flush() { |
|
|
|
if (record && out != null) { |
|
|
|
out.flush(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void setMessageOutputLevel(int level) { |
|
|
@@ -205,6 +216,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
|
|
|
|
|
|
|
|
public void setOutputPrintStream(PrintStream output) { |
|
|
|
closeFile(); |
|
|
|
out = output; |
|
|
|
} |
|
|
|
|
|
|
@@ -215,7 +227,7 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
|
|
|
|
|
|
|
|
public void setErrorPrintStream(PrintStream err) { |
|
|
|
out = err; |
|
|
|
setOutputPrintStream(err); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@@ -254,12 +266,57 @@ public class RecorderEntry implements BuildLogger, SubBuildListener { |
|
|
|
* @since 1.6.2 |
|
|
|
*/ |
|
|
|
public void cleanup() { |
|
|
|
out.flush(); |
|
|
|
out.close(); |
|
|
|
closeFile(); |
|
|
|
if (project != null) { |
|
|
|
project.removeBuildListener(this); |
|
|
|
} |
|
|
|
project = null; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Initially opens the file associated with this recorder. |
|
|
|
* Used by Recorder. |
|
|
|
* @param append Indicates if output must be appended to the logfile or that |
|
|
|
* the logfile should be overwritten. |
|
|
|
* @throws BuildException |
|
|
|
* @since 1.6.3 |
|
|
|
*/ |
|
|
|
void openFile(boolean append) throws BuildException { |
|
|
|
openFileImpl(append); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Closes the file associated with this recorder. |
|
|
|
* Used by Recorder. |
|
|
|
* @since 1.6.3 |
|
|
|
*/ |
|
|
|
void closeFile() { |
|
|
|
if (out != null) { |
|
|
|
out.close(); |
|
|
|
out = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Re-opens the file associated with this recorder. |
|
|
|
* Used by Recorder. |
|
|
|
* @throws BuildException |
|
|
|
* @since 1.6.3 |
|
|
|
*/ |
|
|
|
void reopenFile() throws BuildException { |
|
|
|
openFileImpl(true); |
|
|
|
} |
|
|
|
|
|
|
|
private void openFileImpl(boolean append) throws BuildException { |
|
|
|
if (out == null) { |
|
|
|
try { |
|
|
|
out = new PrintStream(new FileOutputStream(filename, append)); |
|
|
|
} catch (IOException ioe) { |
|
|
|
throw new BuildException("Problems opening file using a " + |
|
|
|
"recorder entry", ioe); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|