in src/main/java/org/apache/easyant/core/ant/ProjectUtils.java [68:106]
public static void replaceMainLogger(Project project, BuildLogger logger) {
// Change the default output logger
PrintStream out = System.out;
PrintStream err = System.err;
int currentLogLevel = Project.MSG_INFO;
project.log("removing current logger", Project.MSG_DEBUG);
// since DefaultLogger doesn't offer any way to get the out / err print
// streams we should use reflection
// TODO: we should find a better way to do this
for (BuildListener l : project.getBuildListeners()) {
if (l instanceof DefaultLogger) {
try {
Field fieldOut = DefaultLogger.class.getDeclaredField("out");
fieldOut.setAccessible(true);
out = (PrintStream) fieldOut.get(l);
Field fieldErr = DefaultLogger.class.getDeclaredField("err");
fieldErr.setAccessible(true);
err = (PrintStream) fieldErr.get(l);
Field fieldMsgLevel = DefaultLogger.class.getDeclaredField("msgOutputLevel");
fieldMsgLevel.setAccessible(true);
currentLogLevel = (Integer) fieldMsgLevel.get(l);
} catch (IllegalAccessException ex) {
throw new BuildException(ex);
} catch (SecurityException e) {
throw new BuildException(e);
} catch (NoSuchFieldException e) {
throw new BuildException(e);
}
project.removeBuildListener(l);
}
}
project.log("Initializing new logger " + logger.getClass().getName(), Project.MSG_DEBUG);
logger.setOutputPrintStream(out);
logger.setErrorPrintStream(err);
logger.setMessageOutputLevel(currentLogLevel);
project.setProjectReference(logger);
project.addBuildListener(logger);
}