动态改变 log4j 日志级别

新手上路,请多包涵

动态更改 log4j 日志级别的不同方法是什么,这样我就不必重新部署应用程序。在这些情况下,这些变化会是永久性的吗?

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

阅读 686
2 个回答

更改日志级别很简单;修改配置的其他部分将构成更深入的方法。

 LogManager.getRootLogger().setLevel(Level.DEBUG);

这些更改在 Logger 的生命周期中是永久性的。在重新初始化时,配置将被读取并使用,因为在运行时设置级别不会保留级别更改。

更新: 如果您使用的是 Log4j 2,则应根据 文档 删除对 setLevel 的调用,因为这可以通过实现类来实现。

API 不支持调用 logger.setLevel() 或类似方法。应用程序应删除这些。 Log4j 2 实现类中提供了等效功能,但可能会使应用程序容易受到 Log4j 2 内部变化的影响。

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

文件看门狗

Log4j 能够观察 log4j.xml 文件的配置更改。如果您更改 log4j 文件,log4j 将根据您的更改自动刷新日志级别。有关详细信息,请参阅 org.apache.log4j.xml.DOMConfigurator.configureAndWatch(String,long 的文档。检查之间的默认等待时间为 60 秒。这些更改将是持久的,因为您直接更改文件系统上的配置文件。您需要做的就是调用 DOMConfigurator.configureAndWatch() 一次。

注意:由于线程泄漏,configureAndWatch 方法在 J2EE 环境中使用是不安全的

JMX

另一种设置日志级别(或一般重新配置)log4j 的方法是使用 JMX。 Log4j 将其记录器注册为 JMX MBean。使用应用程序服务器 MBeanServer 控制台(或 JDK 的 jconsole.exe),您可以重新配置每个单独的记录器。这些更改不是持久的,并且会在您重新启动应用程序(服务器)后重置为配置文件中设置的配置。

自制

正如 Aaron 所述,您可以通过编程方式设置日志级别。您可以按照您希望的方式在您的应用程序中实现它。例如,您可以有一个 GUI,用户或管理员可以在其中更改日志级别,然后在记录器上调用 setLevel() 方法。您是否将设置保留在某处取决于您。

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

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