2013-02-13 3 views
2

Я хотел бы управлять конфигурацией журнала вручную - в частности, я хотел бы создать новый SiftingAppender при необходимости, который имеет FileAppender.Как создать SiftingAppender вручную

Я попытался создать все объекты, чтобы дублировать ту же конфигурацию XML, которую я использовал раньше. К сожалению, я не понимаю, как прикрепить файлообменник к siftappender.

Вот код, я использую:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); 

PatternLayoutEncoder encoder = new PatternLayoutEncoder(); 
encoder.setContext(loggerContext); 
encoder.setPattern("<%d(yyyy-MM-dd HH:mm:ss)> | %.-1level | %msg %n"); 
encoder.start(); 

FileAppender<ILoggingEvent> fAppender = new FileAppender<ILoggingEvent>(); 
fAppender.setContext(loggerContext); 
fAppender.setName(application + "_" + user); 
fAppender.setFile(logUser); 
fAppender.setAppend(true); 
fAppender.setEncoder(encoder); 
fAppender.start(); 

MDCBasedDiscriminator discriminator = new MDCBasedDiscriminator(); 
discriminator.setKey("userid"); 
discriminator.setDefaultValue("unknown"); 
discriminator.start(); 

LevelFilter lFilter = new LevelFilter(); 
lFilter.setLevel(Level.INFO); 
lFilter.start(); 

// **HOW TO ATTACH fAppender on sAppender ????** 
SiftingAppender sAppender = new SiftingAppender(); 
sAppender.setContext(loggerContext); 
sAppender.setName(application + "_" + user + "_SIFTING"); 
sAppender.addFilter(lFilter); 
sAppender.setDiscriminator(discriminator); 
sAppender.start(); 

Logger logger = loggerContext.getLogger("test.mypackage"); 
logger.setAdditive(false); 
logger.setLevel(Level.ALL); 
logger.addAppender(sAppender); 
+0

вы нашли решение для этого? Если да, не могли бы вы добавить ответ с кодом, который вы использовали? спасибо – Cristiano

+0

Нет. Я попросил Цэки, но он никогда не отвечал :( – MychaL

ответ

1

Вы должны были создать appenderFactory и добавить этот завод к siftingAppender:

SiftingAppender siftAppender = new SiftingAppender(); 

    AppenderFactory<ILoggingEvent> appenderFactory = new AppenderFactory<ILoggingEvent>() { 

     @Override 
     public Appender<ILoggingEvent> buildAppender(Context context, String discriminatingValue) throws JoranException { 
      /* Create your file appender here, with what ever options you need */ 

      PatternLayoutEncoder ple = new PatternLayoutEncoder(); 
      ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n"); 
      ple.setContext(context); 
      ple.start(); 
      FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>(); 
      fileAppender.setFile(file); 
      fileAppender.setEncoder(ple); 
      fileAppender.setContext(context); 
      fileAppender.start(); 

      return fileAppender; 
     } 
    }; 

    /* set your factory to the sifting appender */ 
    siftAppender.setAppenderFactory(appenderFactory); 
    siftAppender.setContext(context); 
    siftAppender.setName("TMP"); 
    siftAppender.start(); 

    logger.addAppender(siftAppender); 
    logger.setAdditive(true); 
Смежные вопросы