【问题标题】:Dynamic setting of Log4j level across multiple JVMs跨多个 JVM 动态设置 Log4j 级别
【发布时间】:2011-10-01 06:42:47
【问题描述】:

我在一个应用程序中工作,该应用程序有许多普通的 Java 组件,每个组件都在单独的 JVM 中运行。所有这些组件都使用 Log4j,并且没有选项可以更改为另一个日志库。

正如标题所暗示的,我正在寻找一种“简单”的方法来在所有组件/JVM 中动态应用 Log4j 日志记录级别。 “简单”是指无需重写源代码(否则,可以使用例如接口来获取/设置日志记录级别,并让所有类实现该接口)。

网络上有关于使用 JMX 的文章(例如,通过 Log4j 发行版的 LoggerDynamicBean 类 (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jmx/LoggerDynamicMBean.html)。

一篇有趣的此类文章描述了如何使用应用程序服务器 (Tomcat) 来实现这一点:http://www.devx.com/Java/Article/32359/1954。应用服务器作为 MBeanServer 类的实现似乎是必要的,Log4j 会将所有记录器注册为 MBean。

是否有任何实现跨多个 JVM(通过 JMX 或通过任何其他方式)执行此动态日志记录级别设置?

【问题讨论】:

  • 跨 JVM?不,您需要与每个 JVM 对话,因为它们都有自己的记录器、JMX 侦听器等。
  • 或与同一个组件对话。例如,如果他们都可以与数据库或文件系统通信,则将日志记录级别存储在那里。
  • 是的,这些也是我的想法。我只是希望我错过了一些更“自动化”的东西。 :-)

标签: java log4j jmx


【解决方案1】:

保持简单。将所有 JVM 指向同一个 log4j 配置文件,使用它来偶尔重新加载它们。

PropertyConfigurator.configureAndWatch( yourConfigFile, yourReloadInterval);

【讨论】:

  • 这是我一直在考虑的“B计划”,但问题是,不断重新加载配置文件有潜在的并发问题(或者在我做过的一些测试中出现)。跨度>
猜你喜欢
  • 1970-01-01
  • 2019-11-21
  • 2011-06-03
  • 1970-01-01
  • 2021-07-19
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多