2016-07-30 2 views
0

Я пытаюсь конфиг моего регистратор с такой log4j2.xmllog4j2 несколько файлов, созданные

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
    <RollingFile name="RollingFile" append="true" fileName="logger1" 
           filePattern="logger1_%d{yyyy-MM-dd}.log">  
     <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/> 
     <Policies>    
      <TimeBasedTriggeringPolicy /> 
     </Policies> 
    </RollingFile> 
    <RollingFile name="RollingFile2" append="true" fileName="logger2" 
          filePattern="logger2_%d{yyyy-MM-dd}.log">  
     <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/> 
     <Policies>    
      <TimeBasedTriggeringPolicy /> 
     </Policies> 
    </RollingFile> 
    <Console name="IDE-Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/> 
    </Console> 
    </Appenders> 
    <Loggers> 
    <Logger name="logger1" level="info"> 
     <AppenderRef ref="RollingFile"/> 
    </Logger> 
    <Logger name="logger2" level="info" additivity="false"> 
     <AppenderRef ref="RollingFile2"/> 
    </Logger> 
    <Root level="info" > 
     <AppenderRef ref="IDE-Console"/> 
    </Root> 
    </Loggers> 
</Configuration> 

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

На самом деле, после того, как я призываю

LoggerContext.getContext(this.getClass().getClassLoader(), false, file.toURI()); 

log4j2 создает два файла: Регистратор {1,2}

Тогда я могу получить надлежащий регистратор по имени и начать запись в соответствующий файл, имеющий один дополнительный который я не хочу создавать в папке моего приложения. Это фактически ограничивает меня распространением этого файла на все мое приложение, где требуется только один регистратор. Я думал, используя

getLogger(String loggerName) 

вы можете управлять файлом, в который вы пишете.

Любые идеи, как исправить это?

Заранее спасибо.

ответ

0

File Appenders всегда будет создавать файл, когда Log4j инициализируется. Поэтому, если вы настроите два файловых приложения, вы получите два файла. Поведение, которое вы видите, - это ожидаемое поведение.

Динамическое создание журнальных файлов по требованию с помощью RoutingAppender. Это требует, чтобы ваше приложение использовало ThreadContext. На странице faq есть пример конфигурации, которая показывает, как это сделать: https://logging.apache.org/log4j/2.x/faq.html#separate_log_files

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