public static void replaceMainLogger()

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);

    }