class ModuleLogOutputStage extends AbstractPipelineStage {

    private static final Logger LOGGER                       = SofaBootLoggerFactory
                                                                 .getLogger(ModuleLogOutputStage.class);

    public static final String  MODULE_LOG_OUTPUT_STAGE_NAME = "ModuleLogOutputStage";

    private static final String SYMBOLIC1                    = "  ├─";
    private static final String SYMBOLIC2                    = "  └─";

    private static final String SYMBOLIC3                    = "  │   +---";
    private static final String SYMBOLIC4                    = "  │   `---";

    private static final String SYMBOLIC5                    = "      +---";
    private static final String SYMBOLIC6                    = "      `---";

    @Override
    protected void doProcess() throws Exception {
        logInstalledModules();
        logFailedModules();
    }

    protected void logInstalledModules() {<FILL_FUNCTION_BODY>}

    protected void logFailedModules() {
        List<DeploymentDescriptor> deploys = application.getFailed();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("\n").append("Spring context initialize failed module list")
            .append("(").append(deploys.size()).append(") >>>>>>>\n");
        for (Iterator<DeploymentDescriptor> i = deploys.iterator(); i.hasNext();) {
            DeploymentDescriptor dd = i.next();
            String treeSymbol = SYMBOLIC1;
            if (!i.hasNext()) {
                treeSymbol = SYMBOLIC2;
            }
            stringBuilder.append(treeSymbol).append(dd.getName()).append("\n");
        }
        LOGGER.info(stringBuilder.toString());
    }

    @Override
    public String getName() {
        return MODULE_LOG_OUTPUT_STAGE_NAME;
    }

    @Override
    public int getOrder() {
        return 30000;
    }
}

        List<DeploymentDescriptor> deploys = application.getInstalled();
        StringBuilder stringBuilder = new StringBuilder();
        long totalTime = 0;
        long realStart = 0;
        long realEnd = 0;
        stringBuilder.append("\n").append("Spring context initialize success module list")
            .append("(").append(deploys.size()).append(") >>>>>>>");
        StringBuilder sb = new StringBuilder();
        for (Iterator<DeploymentDescriptor> i = deploys.iterator(); i.hasNext();) {
            DeploymentDescriptor dd = i.next();
            String outTreeSymbol = SYMBOLIC1;
            String innerTreeSymbol1 = SYMBOLIC3;
            String innerTreeSymbol2 = SYMBOLIC4;

            if (!i.hasNext()) {
                outTreeSymbol = SYMBOLIC2;
                innerTreeSymbol1 = SYMBOLIC5;
                innerTreeSymbol2 = SYMBOLIC6;
            }
            sb.append(outTreeSymbol).append(dd.getName()).append(" [").append(dd.getElapsedTime())
                .append(" ms]\n");
            totalTime += dd.getElapsedTime();

            for (Iterator<String> j = dd.getInstalledSpringXml().iterator(); j.hasNext();) {
                String xmlPath = j.next();
                String innerTreeSymbol = innerTreeSymbol1;
                if (!j.hasNext()) {
                    innerTreeSymbol = innerTreeSymbol2;
                }
                sb.append(innerTreeSymbol).append(xmlPath).append("\n");
            }

            if (realStart == 0 || dd.getStartTime() < realStart) {
                realStart = dd.getStartTime();
            }

            if (realEnd == 0 || (dd.getStartTime() + dd.getElapsedTime()) > realEnd) {
                realEnd = dd.getStartTime() + dd.getElapsedTime();
            }
        }
        stringBuilder.append(" [totalTime = ").append(totalTime).append(" ms, realTime = ")
            .append(realEnd - realStart).append(" ms]\n").append(sb);

        LOGGER.info(stringBuilder.toString());
    
<methods>public non-sealed void <init>() ,public void afterPropertiesSet() throws java.lang.Exception,public com.alipay.sofa.boot.isle.ApplicationRuntimeModel getApplicationRuntimeModel() ,public void process() throws java.lang.Exception,public void setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException,public void setApplicationRuntimeModel(com.alipay.sofa.boot.isle.ApplicationRuntimeModel) ,public void setBeanFactory(org.springframework.beans.factory.BeanFactory) throws org.springframework.beans.BeansException,public void setStartupReporter(com.alipay.sofa.boot.startup.StartupReporter) throws org.springframework.beans.BeansException<variables>protected final java.lang.ClassLoader appClassLoader,protected com.alipay.sofa.boot.isle.ApplicationRuntimeModel application,protected org.springframework.context.ConfigurableApplicationContext applicationContext,protected com.alipay.sofa.boot.startup.BaseStat baseStat,protected org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory,protected com.alipay.sofa.boot.startup.StartupReporter startupReporter