如何在 SLF4j 或 Log4J 中动态更改日志级别

2022-09-02 00:58:13

最近,我遇到了应用程序动态变化的情况。应用程序管理员可以将其设置为从前端。根据所选的日志级别,必须更改应用程序日志记录。LoglevelINFO/DEBUG/ WARN

我确信记录器支持这种情况。我怎样才能做到这一点?


答案 1

在 slf4j 中无法动态更改日志级别,但 slf4j 的一些后端支持它,包括 log4j。

这个解决方案对我有用:

org.apache.log4j.Logger logger4j = org.apache.log4j.Logger.getRootLogger();
logger4j.setLevel(org.apache.log4j.Level.toLevel("ERROR"));

(资料来源:http://prateep.info/2015/12/12/Dynamically-change-log-level-in-SLF4j-Log4J-with-Standalone-Java-Class/)

此解决方案的缺点是它直接使用后端,这在使用 slf4j 时不应该这样做,因为 slf4j 的要点是提供远离您正在使用的特定后端的抽象。


答案 2

考虑Logback http://logback.qos.ch/ - “流行的log4j项目的继承者,从log4j离开的地方开始”。如果指示这样做,logback-classic 将扫描其配置文件中的更改,并在配置文件更改时自动重新配置自身。此外,您可以使用JMX控制Logback的日志记录级别。


推荐