Log4j:以编程方式更改日志级别,适用于要创建的记录器

时间:2014-08-26 13:10:30

标签: java log4j

我在代码中声明了记录器,如下所示:

Logger logger = LoggerFactory.getLogger(MyClass.class);

我希望能够在运行时以编程方式更改记录器的日志级别。我尝试通过LogManager迭代存储库中的记录器,但它只将新的日志级别应用于在代码中实例化的记录器。如果创建了新的记录器实例,则它不使用新的日志级别。我的要求是我的Web应用程序中的日志级别需要通过管理GUI进行配置,这个新的日志级别需要应用于我的代码中的所有记录器(不包括第三方库日志记录,例如JSF,Spring,Hibernate等)

这就是我现在正在做的,不符合我的要求,因为它没有将日志级别应用于新实例化的记录器:

Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
while(currentLoggers.hasMoreElements()) {
    Logger logger = currentLoggers.nextElement();
    if (StringUtils.startsWith(logger.getName(), "com.my.company")) {
        logger.setLevel(logLevel);
    }
}

我正在使用Log4j 1.2.17。

1 个答案:

答案 0 :(得分:15)

没有找到资源,但至于我的褪色记忆LogManager.getLogger("com.my.company").setLevel(whateverloglevel)应该可以胜任。

使用LogManager.getLogger(MyClass.class)创建的所有记录器,其中MyClass位于com.my.company 或该的子树中,将受到影响。

whateverloglevelLevel之一:

ALL
ALL的排名最低,打算开启所有日志记录。
DEBUG
DEBUG Level指定对调试应用程序最有用的细粒度信息事件。
错误
错误级别指定可能仍允许应用程序继续运行的错误事件。
致命
致命级别指定非常严重的错误事件,可能会导致应用程序中止。
INFO
INFO级别指定信息性消息,突出显示粗粒度级别的应用程序进度。
OFF
OFF具有最高等级,旨在关闭记录。
TRACE
TRACE Level指定比DEBUG
更精细的信息事件
警告
WARN级别指定可能有害的情况。