1 package ch.qos.logback.classic.joran.action;
2
3 import java.lang.management.ManagementFactory;
4
5 import javax.management.MBeanServer;
6 import javax.management.ObjectName;
7
8 import org.xml.sax.Attributes;
9
10 import ch.qos.logback.classic.LoggerContext;
11 import ch.qos.logback.classic.jmx.JMXConfigurator;
12 import ch.qos.logback.classic.jmx.MBeanUtil;
13 import ch.qos.logback.core.joran.action.Action;
14 import ch.qos.logback.core.joran.spi.ActionException;
15 import ch.qos.logback.core.joran.spi.InterpretationContext;
16 import ch.qos.logback.core.util.OptionHelper;
17
18 public class JMXConfiguratorAction extends Action {
19
20 static final String OBJECT_NAME_ATTRIBUTE_NAME = "objectName";
21 static final String CONTEXT_NAME_ATTRIBUTE_NAME = "contextName";
22 static final char JMX_NAME_SEPARATOR = ',';
23
24 @Override
25 public void begin(InterpretationContext ec, String name, Attributes attributes)
26 throws ActionException {
27 addInfo("begin");
28
29
30 String contextName = context.getName();
31 String contextNameAttributeVal = attributes
32 .getValue(CONTEXT_NAME_ATTRIBUTE_NAME);
33 if(!OptionHelper.isEmpty(contextNameAttributeVal)) {
34 contextName = contextNameAttributeVal;
35 }
36
37 String objectNameAsStr;
38 String objectNameAttributeVal = attributes
39 .getValue(OBJECT_NAME_ATTRIBUTE_NAME);
40 if (OptionHelper.isEmpty(objectNameAttributeVal)) {
41 objectNameAsStr = MBeanUtil.getObjectNameFor(contextName,
42 JMXConfigurator.class);
43 } else {
44 objectNameAsStr = objectNameAttributeVal;
45 }
46
47 ObjectName objectName = MBeanUtil.string2ObjectName(context, this,
48 objectNameAsStr);
49 if (objectName == null) {
50 addError("Failed to for ObjectName for ["+objectNameAsStr+"]");
51 return;
52 }
53
54 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
55 if(!MBeanUtil.isRegistered(mbs, objectName)) {
56
57
58
59
60 JMXConfigurator jmxConfigurator = new JMXConfigurator((LoggerContext) context, mbs,
61 objectName);
62 try {
63 mbs.registerMBean(jmxConfigurator, objectName);
64 } catch (Exception e) {
65 addError("Failed to create mbean", e);
66 }
67 }
68
69 }
70
71 @Override
72 public void end(InterpretationContext ec, String name) throws ActionException {
73
74 }
75
76 }