Java logback以编程方式获取ref appender

Java logback以编程方式获取ref appender,java,java-8,logback,Java,Java 8,Logback,使用此日志文件配置 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>build/test.log</file> <append>false</append> <encoder class="net.logstash.logback.encoder.LoggingEventComposit

使用此日志文件配置

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>build/test.log</file>
    <append>false</append>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp/>
            <arguments/>
            <version/>
            <loggerName/>
            <logLevel/>
            <logLevelValue/>
            <stackTrace/>
            <message/>
            <threadName/>
            <provider class="com.tesco.utils.CorrelatedProvider"/>
        </providers>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>build/test_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>1MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>

<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE"/>
</appender>

<root level="INFO">
    <appender-ref ref="ASYNC_FILE"/>
</root>

build/test.log
假的
生成/测试\%d{yyyy-MM-dd}。%i.log
1MB
30
我正在尝试获取appender文件,但目前唯一可以获取的是ASYNC_文件。如何获取异步_文件的ref appender?。 下面是我迄今为止所做的代码:

  RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
        LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
        for (Logger logger : context.getLoggerList()) {
            for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
                Appender<ILoggingEvent> appender = index.next();
                if(appender.getName().equals("ASYNC_FILE")){
                    //How can I get the reference appender FILE?
                    rollingFileAppender = (RollingFileAppender<ILoggingEvent>) appender;
                }
            }
        }
RollingFileAppender RollingFileAppender=new RollingFileAppender();
LoggerContext=(LoggerContext)LoggerFactory.getILoggerFactory();
对于(记录器:context.getLoggerList()){
for(Iterator index=logger.iteratorforappendes();index.hasNext();){
Appender Appender=index.next();
if(appender.getName().equals(“异步_文件”)){
//如何获取引用appender文件?
rollingFileAppender=(rollingFileAppender)appender;
}
}
}
解决方案 我忘了将appender转换为AsyncAppender,这就是为什么子appender没有公开

   RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
        LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
        for (Logger logger : context.getLoggerList()) {
            for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
                Appender<ILoggingEvent> appender = index.next();
                if(appender.getName().equals("ASYNC_TIMING_LOG")){
                    AsyncAppender asyncAppender = (AsyncAppender) appender;
                    rollingFileAppender = (RollingFileAppender<ILoggingEvent>) asyncAppender.getAppender("TIMING_LOG");
                }
            }
        }
   RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
    LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
    for (Logger logger : context.getLoggerList()) {
        for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
            Appender<ILoggingEvent> appender = index.next();
            if(appender.getName().equals("ASYNC_TIMING_LOG")){
                AsyncAppender asyncAppender = (AsyncAppender) appender;
                rollingFileAppender = (RollingFileAppender<ILoggingEvent>) asyncAppender.getAppender("TIMING_LOG");
            }
        }
    }
RollingFileAppender RollingFileAppender=new RollingFileAppender();
LoggerContext=(LoggerContext)LoggerFactory.getILoggerFactory();
对于(记录器:context.getLoggerList()){
for(Iterator index=logger.iteratorforappendes();index.hasNext();){
Appender Appender=index.next();
if(appender.getName().equals(“异步定时日志”)){
AsyncAppender AsyncAppender=(AsyncAppender)appender;
rollingFileAppender=(rollingFileAppender)asyncAppender.getAppender(“计时日志”);
}
}
}

我忘了将appender强制转换为AsyncAppender,这就是为什么子appender没有公开的原因

   RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
        LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
        for (Logger logger : context.getLoggerList()) {
            for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
                Appender<ILoggingEvent> appender = index.next();
                if(appender.getName().equals("ASYNC_TIMING_LOG")){
                    AsyncAppender asyncAppender = (AsyncAppender) appender;
                    rollingFileAppender = (RollingFileAppender<ILoggingEvent>) asyncAppender.getAppender("TIMING_LOG");
                }
            }
        }
   RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
    LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
    for (Logger logger : context.getLoggerList()) {
        for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
            Appender<ILoggingEvent> appender = index.next();
            if(appender.getName().equals("ASYNC_TIMING_LOG")){
                AsyncAppender asyncAppender = (AsyncAppender) appender;
                rollingFileAppender = (RollingFileAppender<ILoggingEvent>) asyncAppender.getAppender("TIMING_LOG");
            }
        }
    }
RollingFileAppender RollingFileAppender=new RollingFileAppender();
LoggerContext=(LoggerContext)LoggerFactory.getILoggerFactory();
对于(记录器:context.getLoggerList()){
for(Iterator index=logger.iteratorforappendes();index.hasNext();){
Appender Appender=index.next();
if(appender.getName().equals(“异步定时日志”)){
AsyncAppender AsyncAppender=(AsyncAppender)appender;
rollingFileAppender=(rollingFileAppender)asyncAppender.getAppender(“计时日志”);
}
}
}

如果解决了您的问题,请将您的解决方案添加为答案,并且不要忘记将其标记为已接受的解决方案。