2011-06-03 10 views
7

Logback के दस्तावेज़ पर, वे एक्सएमएल फ़ाइल में JMX जानकारी डाल कर लगते आसान:लॉगबैक ग्रोवी कॉन्फ़िगर जेएमएक्स का उपयोग करने के लिए?

http://logback.qos.ch/manual/jmxConfig.html

लेकिन उनकी सभी उदाहरणों उनके एक्सएमएल विन्यास का उपयोग कर रहे हैं और मैं ग्रूवी उपयोग करना चाहते हैं। उनके ग्रूवी डीएसएल दस्तावेज में JMX कौन्फ़िगरेटर का कोई जिक्र नहीं है:

http://logback.qos.ch/manual/groovy.html

तो मैं ग्रूवी अनुवादक के लिए उनके एक्सएमएल में पहली JMX/एक्सएमएल उदाहरण की नकल की।

एक्सएमएल:

<configuration> 
     <jmxConfigurator /> 

     <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 
      <layout class="ch.qos.logback.classic.PatternLayout"> 
      <Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern> 
      </layout> 
     </appender> 

     <root level="debug"> 
     <appender-ref ref="console" /> 
     </root> 
</configuration> 

अनुवादक:

http://logback.qos.ch/translator/asGroovy.html

और परिणाम:

import ch.qos.logback.classic.PatternLayout 
import ch.qos.logback.core.ConsoleAppender 

import static ch.qos.logback.classic.Level.DEBUG 

appender("console", ConsoleAppender) { 
    layout(PatternLayout) { 
    pattern = "%date [%thread] %-5level %logger{25} - %msg%n" 
} 
} 
root(DEBUG, ["console"]) 

और यह JMX के साथ कुछ भी नहीं किया है - बस डाल कंसोल एपेंडर में।

कोई विचार जो मुझे करना है?

उत्तर

8

ग्रोवी-आधारित कॉन्फ़िगरेशन फ़ाइलों को पार्स करने के लिए कॉन्फ़िगरेटर, XML-आधारित कॉन्फ़िगरेशन फ़ाइलों में jmxConfigurator का समर्थन नहीं करता है। लेकिन हम अभी भी JMX कॉन्फ़िगरेटर प्रारंभ करने के लिए हमारी ग्रूव कॉन्फ़िगरेशन फ़ाइल में एक विधि लिख सकते हैं।

यदि हम लॉगबैक के स्रोत कोड को देखते हैं तो हम देखते हैं कि फ़ाइल ch.qos.logback.classic.joran.action.JMXConfigurationAction XML-आधारित कॉन्फ़िगरेशन से JMX सेट करने के लिए सामान करता है। हम इस कोड का उपयोग ग्रोवी संस्करण के नमूने के रूप में कर सकते हैं।

def jmxConfigurator() { 
    def contextName = context.name 
    def objectNameAsString = MBeanUtil.getObjectNameFor(contextName, JMXConfigurator.class) 
    def objectName = MBeanUtil.string2ObjectName(context, this, objectNameAsString) 
    def platformMBeanServer = ManagementFactory.getPlatformMBeanServer() 
    if (!MBeanUtil.isRegistered(platformMBeanServer, objectName)) { 
     JMXConfigurator jmxConfigurator = new JMXConfigurator((LoggerContext) context, platformMBeanServer, objectName) 
     try { 
      platformMBeanServer.registerMBean(jmxConfigurator, objectName) 
     } catch (all) { 
      addError("Failed to create mbean", all) 
     } 
    } 
} 

jmxConfigurator() 

मैंने इस कोड का स्वयं परीक्षण नहीं किया है, लेकिन मुझे उम्मीद है कि सामान्य विचार स्पष्ट है।

+0

यह काम किया - धन्यवाद! लेकिन यह बेहतर होगा अगर लॉगबैक दस्तावेज बताएगा कि ग्रोवी कॉन्फ़िगरेशन जेएमएक्स को मूल रूप से/आसानी से नहीं करता है। उनके दस्तावेज़ इसे व्याकरण की तरह ध्वनि बनाते हैं। – MikeHoss

+1

बस इसे अपने बग ट्रैकर में जोड़ा गया: http://jira.qos.ch/browse/LBGENERAL-48 – sourcedelica

1

Logback 2013 में added support for JMX configuration in the Groovy config:

आप रजिस्टर कर सकते हैं एक JMXConfigurator MBean, (Logback के डिफ़ॉल्ट ObjectName का प्रयोग करके) अपने logback.groovy के लिए निम्न जोड़कर:

jmxConfigurator() 

अधिक जानकारी और इस विधि in the manual के भार के।

संबंधित मुद्दे