2016-05-30 3 views
1

Я перехожу из log4j1 в log4j2, но, как многие народы сказали, метод getAllAppenders уже не существует.Миграция с log4j1 на log4j2

Я два куска кода, который будет заменен, но я не нашел симпатичный в, чтобы сделать это:

try { 
     // termination 
     @SuppressWarnings("unchecked") 
     Enumeration<Appender> appenders = Logger.getRootLogger().getAllAppenders(); 
     if(appenders != null) { 
      while (appenders.hasMoreElements()) { 
       Appender appender = appenders.nextElement(); 
       if (appender instanceof AsyncAppender) { 
        appender.close(); 
       } 
      } 
     } 
    } catch(Exception e) { 
     //forget exception 
    } 

Вторым является:

Logger rootLogger = Logger.getRootLogger(); 
    FileAppender fileAppender = (FileAppender) ((AsyncAppender) rootLogger.getAppender("ASYNC")).getAppender("file"); 
    mailService.sendAlertForFXTraderSupport(env, user, new File(fileAppender.getFile()),executionFolder); 

моего log4j2:

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

<Appenders> 
    <Console name="stdout" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%-d{yyyy MMM dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n" /> 
    </Console> 

    <RollingFile name="file" 
     fileName="C:/temp/tetrafx-gui-dev-${tetrafx.location}.log" 
     filePattern="C:/temp/$${date:yyyy-MM-dd}/tetrafx-gui-dev-%d{yyyy-MM-dd}-%i.log.gz"> 
     <PatternLayout pattern="%-d{yyyy MMM dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n" /> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" /> 
     </Policies> 
    </RollingFile> 

    <Async name="ASYNC" bufferSize="1000"> 
     <AppenderRef ref="stdout" /> 
     <AppenderRef ref="file" /> 
    </Async> 
</Appenders> 
<Loggers> 
    <Root level="all"> 
     <AppenderRef ref="ASYNC" /> 
    </Root> 
</Loggers> 

Есть ли у вас какие-либо предложения?

Спасибо

ответ

1

первый, закрытие Appenders, это не то, что ваше приложение должно делать больше в Log4j 2. Log4j 2 имеет выключение крюк, который берет на себя всю необходимую очистку.

Что касается второго вопроса, то вы можете получить файл Appender и имя файла с:

LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); 
Configuration config = context.getConfiguration(); 
RollingFileAppender rfa = (RollingFileAppender) config.getAppender("file"); 
String fileName = rfa.getManager().getFileName(); 
Смежные вопросы