Created
October 10, 2012 13:51
-
-
Save jspiewak/3865778 to your computer and use it in GitHub Desktop.
Exposing Logback via JMX in Dropwizard
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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