Changeset 1716


Ignore:
Timestamp:
2010-09-29 09:11:26 (3 years ago)
Author:
bruno
Message:

Adding log4j MBean registration. This allows to e.g. modify log levels on the fly via jconsole.
The code is copied from Apache ZooKeeper? but it is a pretty common snippet found in many places.
Required upgrade to log4j 1.2.16 to avoid errors about the same mbean being registered multiple times.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/core/kauri-runtime-cli/src/main/java/org/kauriproject/runtime/cli/KauriRuntimeCli.java

    r1332 r1716  
    2424import java.util.logging.LogManager; 
    2525 
     26import javax.management.JMException; 
    2627import javax.xml.parsers.DocumentBuilder; 
    2728import javax.xml.parsers.DocumentBuilderFactory; 
     
    183184                cmd.getOptionValue(consoleLoggingOption.getOpt()), cmd.getOptionValue(consoleLogCatOption.getOpt())); 
    184185 
     186        try { 
     187            Logging.registerLog4jMBeans(); 
     188        } catch (JMException e) { 
     189            infolog.error("Unable to register log4j JMX control", e); 
     190        } 
     191 
    185192        infolog.info("Starting the Kauri Runtime."); 
    186193         
  • trunk/core/kauri-runtime-cli/src/main/java/org/kauriproject/runtime/cli/Logging.java

    r1702 r1716  
    1717 
    1818import org.apache.log4j.*; 
     19import org.apache.log4j.jmx.HierarchyDynamicMBean; 
     20import org.apache.log4j.spi.LoggerRepository; 
    1921import org.apache.log4j.xml.DOMConfigurator; 
    2022import org.kauriproject.runtime.KauriRuntime; 
    2123 
     24import javax.management.JMException; 
     25import javax.management.MBeanServer; 
     26import javax.management.ObjectName; 
    2227import java.io.File; 
    2328import java.io.IOException; 
     29import java.lang.management.ManagementFactory; 
     30import java.util.Enumeration; 
    2431 
    2532public class Logging { 
     
    144151        } 
    145152    } 
     153 
     154    /** 
     155     * This method was copied from Apache ZooKeeper, but it is a pretty common snippet 
     156     * that can be found in many places. 
     157     * 
     158     * Register the log4j JMX mbeans. Set environment variable 
     159     * "kauri.jmx.log4j.disable" to true to disable registration. 
     160     * http://logging.apache.org/log4j/1.2/apidocs/index.html?org/apache/log4j/jmx/package-summary.html 
     161     * @throws javax.management.JMException if registration fails 
     162     */ 
     163    public static void registerLog4jMBeans() throws JMException { 
     164        if (Boolean.getBoolean("kauri.jmx.log4j.disable")) { 
     165            return; 
     166        } 
     167 
     168        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
     169 
     170        // Create and Register the top level Log4J MBean 
     171        HierarchyDynamicMBean hdm = new HierarchyDynamicMBean(); 
     172 
     173        ObjectName mbo = new ObjectName("log4j:hierarchy=default"); 
     174        mbs.registerMBean(hdm, mbo); 
     175 
     176        // Add the root logger to the Hierarchy MBean 
     177        Logger rootLogger = Logger.getRootLogger(); 
     178        hdm.addLoggerMBean(rootLogger.getName()); 
     179 
     180        // Get each logger from the Log4J Repository and add it to 
     181        // the Hierarchy MBean created above. 
     182        LoggerRepository r = LogManager.getLoggerRepository(); 
     183        Enumeration enumer = r.getCurrentLoggers(); 
     184        Logger logger; 
     185 
     186        while (enumer.hasMoreElements()) { 
     187            logger = (Logger) enumer.nextElement(); 
     188            hdm.addLoggerMBean(logger.getName()); 
     189        } 
     190    } 
    146191} 
  • trunk/pom.xml

    r1710 r1716  
    600600        <groupId>log4j</groupId> 
    601601        <artifactId>log4j</artifactId> 
    602         <version>1.2.14</version> 
     602        <version>1.2.16</version> 
    603603      </dependency> 
    604604      <dependency> 
Note: See TracChangeset for help on using the changeset viewer.