private static RollingFileAppender getAppender()

in appactive-java-client/client-support/src/main/java/io/appactive/support/log/LoggerBuilder.java [173:239]


    private static RollingFileAppender getAppender(String name, Level level) {
        LoggerContext context = getContext();
        //这里是可以用来设置appender的,在xml配置文件里面,是这种形式:
        // <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        RollingFileAppender appender = new RollingFileAppender();


        //设置上下文,每个logger都关联到logger上下文,默认上下文名称为default。
        // 但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
        appender.setContext(context);
        //appender的name属性
        appender.setName("FILE-" + name);
        //设置文件名

        String logPath = getLogPath() + "/";
        appender.setFile(OptionHelper.substVars(logPath + name + ".log", context));

        appender.setAppend(true);

        appender.setPrudent(false);

        if(level != null){
            // 这里设置级别过滤器
            LevelFilter levelFilter = getLevelFilter(Level.ERROR);
            levelFilter.start();
            appender.addFilter(levelFilter);
        }

        //设置文件创建时间及大小的类
        SizeAndTimeBasedRollingPolicy policy = new SizeAndTimeBasedRollingPolicy();
        policy.setContext(context);
        //文件名格式
        String fp = OptionHelper.substVars(logPath + "history/%d{yyyy-MM-dd}/" + name + "-%d{yyyy-MM-dd}.%i.log",
            context);
        //最大日志文件大小
        policy.setMaxFileSize(FileSize.valueOf("50MB"));
        //设置文件名模式
        policy.setFileNamePattern(fp);
        //设置最大历史记录为3条
        policy.setMaxHistory(3);
        //总大小限制
        policy.setTotalSizeCap(FileSize.valueOf("2GB"));
        //设置父节点是appender
        policy.setParent(appender);
        //设置上下文,每个logger都关联到logger上下文,默认上下文名称为default。
        // 但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
        policy.setContext(context);
        policy.start();

        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        //设置上下文,每个logger都关联到logger上下文,默认上下文名称为default。
        // 但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
        encoder.setContext(context);
        //设置格式 格式化日志的logger的输出格式不同
        if(!name.endsWith(STANDARD_LOG_NAME_END_FIX)){
            encoder.setPattern(FILE_LOG_PATTERN);
        }else {
            encoder.setPattern(STANDARD_FILE_LOG_PATTERN);
        }
        encoder.start();

        //加入下面两个节点
        appender.setRollingPolicy(policy);
        appender.setEncoder(encoder);
        appender.start();
        return appender;
    }