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

新手上路,请多包涵

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

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

原文由 Narendra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

原文由 Evgeniy Dorofeev 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 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 的要点是提供远离您正在使用的特定后端的抽象。

原文由 outofthecave 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题