Как изменить шаблон log4j2 в работающем приложении
Я ищу возможность изменить формат даты log4j2 в уже запущенном приложении. Мне это нужно для клиента, где пользователь может выбирать между разными языками. В зависимости от его выбора, я хотел бы изменить шаблон (макет), который в настоящее время (просто пример) настроен как
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>
У кого-нибудь есть подсказка / подсказка, как это сделать? Я не смог найти никаких ресурсов, так как log4j 1 используется в основном....
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>
Джава:
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!
Log4j 2 имеет атрибут конфигурации для этого
log4j2.xml:
<Configuration monitorInterval="5">
...
</Configuration>
log4j 2 автоматически перечитывает всю конфигурацию каждые секунды монитора