2013-07-12 4 views
2

У меня есть сервлет, который направляет запрос на «живую» или «тестовую» систему.Как разбить журналы журнала на основе «категории»

Сервлет знает это на основе пути URI. Я хотел бы написать журналы в двух отдельных файлах 1 для живого для теста.

Так что я знаю, что нужно использовать MDC

Итак ...

class MyServlet ... { 
    Logger logger = LoggerFactory.getLogger("com.xxx.abc"); 

    HttpServletRequest(...) 
    { 
     if(path contains "live") 
      MDC.put("production", "Live"); 
     else 
      MDC.put("production", "Test"); 

     logger.info("Request processed..."); 
    } 
} 

В моей logback.xml У меня есть два appenders. Как сообщить логгеру выбрать нужный appender на основе значения MDC теста или жить?

ответ

0

Ответ на старый вопрос здесь, но это выглядит как идеальный кандидат для журнала Logback's SiftingAppender.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender"> 
     <discriminator> 
      <key>production</key> 
      <defaultValue>unknown</defaultValue> 
     </discriminator> 
     <sift> 
      <appender name="FILE-${production}" class="ch.qos.logback.core.FileAppender"> 
       <file>${production}.log</file> 
       <layout class="ch.qos.logback.classic.PatternLayout"> 
        <pattern>...</pattern> 
       </layout> 
      </appender> 
     </sift> 
    </appender> 

    <root level="ALL"> 
     <appender-ref ref="SIFTER" /> 
    </root> 
</configuration> 

Значение production будут подставлены в имени файла журнала. Таким образом, события журналов, которые содержат значение MDC production=Live, будут записаны в Live.log через FILE-Live, а события регистрации, которые содержат значение MDC production=Test, будут записаны в Test.log с помощью приложения FILE-Test.

Смежные вопросы