2013-11-18 8 views
1

im ищет возможность изменить формат даты log4j2 в уже запущенном приложении. Мне нужно это для клиента, где пользователь может выбирать между разными языками. В зависимости от его выбора я хотел бы изменить шаблон (макет), который в настоящее время (просто пример), выполненный в видеКак изменить шаблон log4j2 в запущенном приложении

<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>

Кто-нибудь есть намек/понятия, как это сделать? Я не смог найти ресурсы, так как log4j используется в основном ....

ответ

2

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

XML:

<Configuration status="WARN"> 
    <Appenders> 
     <Console name="console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Root level="debug"> 
      <AppenderRef ref="console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

Java:

logger.info("hey!"); 

LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
Configuration conf = ctx.getConfiguration(); 
Appender console = conf.getAppenders().get("console"); // <-- your appender name 
PatternLayout layout = (PatternLayout) console.getLayout(); 

layout.setConversionPattern("%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"); 

ctx.updateLoggers(conf); 

logger.info("hey!"); 

результат:

14:02:00.343 [main] INFO test.Log4j2Sample - hey! 
14:02:00 [main] INFO test.Log4j2Sample - hey! 
+0

Метод 'setConversionPattern' не существуют (больше?). –

0

Log4j 2 имеет атрибут конфигурации для этого

log4j2.xml:

<Configuration monitorInterval="5"> 
    ... 
</Configuration> 

log4j 2 автоматически перечитать всю конфигурацию каждые monitorInterval секунд

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