Как динамически включать или отключать один из приложений rootLogger в log4j2?

Как динамически включать или отключать один файл rootLogger в log4j2 по java во время выполнения?

например, я хочу отключить Console Appender:

...
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
...

Возможно ли это?

Ответ 1

Вы можете программно добавлять или удалять приложение. В вашем случае удалите Console

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
config.getRootLogger().removeAppender("CONSOLE");
ctx.updateLoggers();

Существует LifeCycle интерфейс с методами stop и start, но похоже, что вы не можете перезапустить приложение после того как он был остановлен.

Ответ 2

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