【发布时间】: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 侦听器等。
-
或与同一个组件对话。例如,如果他们都可以与数据库或文件系统通信,则将日志记录级别存储在那里。
-
是的,这些也是我的想法。我只是希望我错过了一些更“自动化”的东西。 :-)