2013-02-13 149 views
2

我想手動管理logback配置 - 具體而言,我希望在必要時創建一個新的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 2014-10-02 13:17:56

+0

號我問Ceki但他從來沒有回答:( – MychaL 2014-10-13 10:48:39

回答

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);