Skip to content

Instantly share code, notes, and snippets.

@jspiewak
Created October 10, 2012 13:51
Show Gist options
  • Save jspiewak/3865778 to your computer and use it in GitHub Desktop.
Save jspiewak/3865778 to your computer and use it in GitHub Desktop.
Exposing Logback via JMX in Dropwizard
package com.yammer.dropwizard;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.jmx.JMXConfigurator;
import ch.qos.logback.classic.jmx.MBeanUtil;
import com.yammer.dropwizard.lifecycle.Managed;
import org.slf4j.LoggerFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
/**
* Dropwizard configures Logback programmatically so we need to trigger JMX registration ourselves.
* Copied shamelessly from ch.qos.logback.classic.joran.action.JMXConfiguratorAction
*/
public class LogbackJmxConfiguratorManager implements Managed {
private ObjectName objectName;
@Override
public void start() throws Exception {
Logger root = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
LoggerContext context = root.getLoggerContext();
String contextName = context.getName();
String objectNameAsStr = MBeanUtil.getObjectNameFor(contextName, JMXConfigurator.class);
objectName = MBeanUtil.string2ObjectName(context, this, objectNameAsStr);
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
if (!MBeanUtil.isRegistered(mbs, objectName)) {
JMXConfigurator jmxConfigurator = new JMXConfigurator(context, mbs, objectName);
try {
mbs.registerMBean(jmxConfigurator, objectName);
}
catch (Exception e) {
root.error("Failed to create mbean", e);
}
}
}
@Override
public void stop() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.unregisterMBean(objectName);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment