动态更改 log4j 日志级别文件监视器断续器自制

2022-08-31 08:06:34

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


答案 1

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

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

这些变化在 .重新初始化时,将读取配置并用作在运行时设置级别不会保留级别更改。Logger

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

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


答案 2

文件监视器

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

警告:由于线程泄漏,configureAndWatch 方法在 J2EE 环境中使用不安全

断续器

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

自制

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


推荐