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(“计时日志”);
}
}
}
如果解决了您的问题,请将您的解决方案添加为答案,并且不要忘记将其标记为已接受的解决方案。