在不调整log4j.xml的情况下记录jboss

时间:2012-05-18 18:51:08

标签: jboss log4j jmx

对于JMX和JBoss来说,我都非常陌生。我们正在运行带有JBoss的服务器,而log4j则运行错误。我被要求提出一种记录freememory和活动线程组计数的方法,以便我们可以监视这些,而无需通过jboss控制台。但是,我被告知,如果我可以这样做而不必对现有服务器进行任何更改,那将是首选。我原来的想法是更改log4j.xml以将相关数据保存到数据库以解析并稍后显示,但是现在我真的不知道。 有没有其他方法,没有安装第三方应用程序,自动从jboss服务器获取信息并坚持下去?或者我应该继续战斗以允许修改log4j xml? 还有,这甚至可能吗?我已经查看了一些示例,但没有具体说明您可以使用log4j来记录系统统计信息。

提前致谢

1 个答案:

答案 0 :(得分:0)

亨特;

假设没有网络障碍且未以任何方式禁用JMX远程处理,您可以使用JMX API远程监控这些值。这里有一些Groovy代码,但您可以将其转换为Java easilly。

import javax.management.*;
import javax.naming.*;
Properties p = new Properties();
p.put(Context.PROVIDER_URL, url);
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put("jnp.disableDiscovery", "true");
ctx = new InitialContext(p);
contexts.put(url, ctx);
mbeanServer = ctx.lookup("/jmx/rmi/RMIAdaptor");
// Lookups here

/client/jbossall-client.jar 放入类路径中。

现在只需滚动浏览JMXConsole(如果必须,在Dev服务器上)并选择要收集的属性和ObjectName。例如,扩展上面的示例,以获得FreeMemory(再次groovy):

import javax.management.*;
def objectName = new ObjectName("jboss.system:type=ServerInfo");
def freeMem = mbeanServer.getAttribute(objectName, "FreeMemory");

在JMXConsole中,映射到此MBean:

enter image description here

以及该MBean中的此属性:

enter image description here

因此,如果您设置调度程序以不时收集此数据,您可以将其写入数据库,将其放入电子邮件或其他任何内容。

有意义吗?