无法在运行时更改日志级别(log4j2)

时间:2015-11-24 10:59:14

标签: java log4j2

我正在使用log4j2并尝试在运行时更改日志级别。我看过其他类似的帖子herehere,但仍然无法让它发挥作用

这是我的代码:

public static void main(String[] args)
{
        Logger log = LogManager.getLogger(LogManager.getLogger(Main.class.getName()).getName());

        LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        Configuration config = ctx.getConfiguration();
        LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.getLogger(Main.class.getName()).getName()); 

        loggerConfig.setLevel(Level.DEBUG);
        ctx.updateLoggers(config);

        log.trace("trace");
        log.debug("debug");
        log.info("info");

        loggerConfig.setLevel(Level.TRACE);
        ctx.updateLoggers(config);

        log.trace("trace");
        log.debug("debug");
        log.info("info");
    }
}

配置文件中的日志级别设置为INFO。控制台输出是:

info
info

更新

我意识到日志级别 在日志文件中成功更改,但未在控制台中更改。

以下是配置文件中的一个片段,以防它有用:

<Configuration status="info">
<Loggers>
    <Root level="debug">
        <AppenderRef ref="Console" level="INFO" />
        <AppenderRef ref="LogFile" />
    </Root>
</Loggers>

1 个答案:

答案 0 :(得分:0)

appender上的属性级别是appender的过滤器:此appender不考虑所有较低级别的日志,但它不是记录器的级别

删除控制台appender上的过滤器,只保留记录器上的级别才能正常工作