如何在log4j2中动态打开或关闭rootLogger的一个appender?

Ami*_* Sh 13 java log4j log4j2

如何在运行时通过java在log4j2中动态打开或关闭rootLogger的一个appender?

例如,我想禁用Console Appender:

...
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
...
Run Code Online (Sandbox Code Playgroud)

可能吗?

Ant*_*iuc 5

您可以以编程方式添加或删除 appender。在你的情况下,让我们删除Console

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
config.getRootLogger().removeAppender("CONSOLE");
ctx.updateLoggers();
Run Code Online (Sandbox Code Playgroud)

有一个带有方法和的LifeCycle接口,但看起来您无法在停止后重新启动 appender。stopstart