Как изменить шаблон 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 автоматически перечитывает всю конфигурацию каждые секунды монитора

Другие вопросы по тегам