我在代码中声明了记录器,如下所示:
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。
答案 0 :(得分:15)
没有找到资源,但至于我的褪色记忆LogManager.getLogger("com.my.company").setLevel(whateverloglevel)
应该可以胜任。
使用LogManager.getLogger(MyClass.class)
创建的所有记录器,其中MyClass位于com.my.company 或该的子树中,将受到影响。
whateverloglevel
是Level之一: