我在我的代码中这样声明记录器:
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。
最佳答案
找不到资源了,但至于我褪色的内存 LogManager.getLogger("com.my.company").setLevel(whateverloglevel)
应该可以解决问题。
所有使用 LogManager.getLogger(MyClass.class)
创建的记录器,其中 MyClass 在 com.my.company 或其子树中 将受到影响。
whateverloglevel
是 Level 之一:
- ALL
- ALL 的级别最低,旨在打开所有日志记录。
- DEBUG
- DEBUG 级别指定对调试应用程序最有用的细粒度信息事件。
- ERROR
- ERROR 级别指定可能仍允许应用程序继续运行的错误事件。
- FATAL
- FATAL 级别指定非常严重的错误事件,可能会导致应用程序中止。
- INFO
- INFO 级别指定在粗粒度级别突出显示应用程序进度的信息性消息。
- OFF
- OFF 具有最高级别,旨在关闭日志记录。
- TRACE
- TRACE 级别指定比 DEBUG 更细粒度的信息事件
- WARN WARN 级别指定潜在的有害情况。
请注意,这可能在 log4j 2 中不起作用。
对于(我认为)版本 >= 2.4,请参阅:
关于java - Log4j:以编程方式更改日志级别,适用于要创建的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506683/