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

Java 如何在log4j2中动态打开或关闭rootLogger的一个appender?,java,log4j,log4j2,Java,Log4j,Log4j2,如何在运行时通过java动态地打开或关闭log4j2中rootLogger的一个appender 例如,我想禁用控制台附加器: ... <Loggers> <Root level="INFO"> <AppenderRef ref="Console"/> <AppenderRef ref="RollingFile"/> </Root> <

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

例如,我想禁用控制台附加器:

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

是否可能?

您可以将脚本筛选器添加到控制台appenderref,以检查系统属性的值。然后,当您希望禁用登录到控制台时,只需设置属性。当您想重新打开时,请将其重置。

您可以通过编程方式添加或删除追加器。在您的情况下,让我们删除
控制台

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

有一个包含方法
stop
start
的接口,但在appender停止后,您似乎无法重新启动它

在我看来,如果您想通过代码来操作附加程序,您需要以编程方式添加附加程序。这里有一些类似的问题,我没有太多的上下文。但也许您可以在运行时通过JMX禁用/启用它?为什么不在.removeAppender()方法之后调用stop()方法呢?为什么不能重新启动appender?