2011-06-03 13 views
7

En la documentación del Logback, que producen al poner información JMX en el archivo XML parecer fácil:Logback Groovy Config para usar JMX?

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

Pero todos sus ejemplos están utilizando su configuración XML y quiero usar maravilloso. No hay ninguna mención de JMX configurador en su documentación DSL maravilloso:

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

Así que copiar el primer ejemplo JMX/XML en su XML al traductor maravilloso.

El XML:

<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> 

El traductor:

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

Y el resultado:

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"]) 

Y no hicieron nada con JMX - sólo hay que poner en el apilador de la consola.

¿Alguna idea de lo que tengo que hacer?

Respuesta

8

El configurador para analizar los archivos de configuración basados ​​en Groovy no admite el jmxConfigurator como en los archivos de configuración basados ​​en XML. Pero aún podemos escribir un método en nuestro archivo de configuración Groov para inicializar el Configurador JMX.

Si miramos el código fuente de Logback, vemos que el archivo ch.qos.logback.classic.joran.action.JMXConfigurationAction hace lo necesario para configurar JMX desde la configuración basada en XML. Podemos usar este código como muestra para la versión de Groovy.

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() 

No he probado este código yo mismo, pero espero que la idea general esté clara.

+0

Esto funcionó - ¡Gracias! Pero sería mejor si la documentación de inicio de sesión señalara que la configuración de Groovy no hace nativa/fácilmente JMX. Sus documentos lo hacen sonar como si la gramática fuera la misma. – MikeHoss

+1

Acabo de agregarlo a su rastreador de errores: http://jira.qos.ch/browse/LBGENERAL-48 – sourcedelica

Cuestiones relacionadas