我试图将<jmxConfigurator/>
放在logback配置文件中。我能够将jconsole连接到本地JVM运行单元测试并与logback mbean进行交互。但是,当我将Web应用程序部署到远程Websphere应用程序服务器并将jconsole连接到该远程JVM时,我无法在MBeans面板中看到logback mbean。
作为比较,Web应用程序使用spring boot构建,默认情况下也会注册一些MBean。我可以在两种情况下看到弹簧启动的MBean。
我进一步调查了一下,发现logback始终从ManagementFactory.getPlatformMBeanServer()
获取MBeanServer实例,而spring在Websphere / Weblogic环境中使用不同的方法。
在Websphere环境中,为远程连接公开的MBeanServer实例似乎不是默认的PlatformMBeanServer。
所以问题是,如何将logback mbean注册到WebSphere自定义MBeanServer,而不是默认的PlatformMBeanServer?
WebSphere自定义MBeanServer受到青睐,因为它可以更好地与安全性和群集功能集成。
答案 0 :(得分:0)
这是我的解决方法,扩展了JMXConfigurator
。
仅供记录,没有文件支持此类扩展,我没有使用多个网络应用程序对其进行测试。
此类继承了JMXConfigurator
的大多数行为,但它将从Spring注入的MBeanServer
注册/取消注册。
@ManagedResource(objectName = AnnotatedJMXConfigurator.NAME, description = "Logback Configuration Management Bean")
@Component
public class AnnotatedJMXConfigurator extends JMXConfigurator {
public static final String NAME = "xxx.ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator";
private static final LoggerContext CONTEXT = (LoggerContext) LoggerFactory.getILoggerFactory();
private static final ObjectName OBJECT_NAME;
static {
try {
OBJECT_NAME = new ObjectName(NAME);
} catch (MalformedObjectNameException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
@Autowired
public AnnotatedJMXConfigurator(MBeanServer mbs) {
super(CONTEXT, mbs, OBJECT_NAME);
}
}